Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Paulm

Frischling

  • »Paulm« ist der Autor dieses Themas

Beiträge: 69

Wohnort: Baden-Württemberg

Beruf: Schüler

  • Private Nachricht senden

11

02.03.2013, 07:07

Ist es möglichdie windows prozedur in eine klasse zu packen und das problem somit zu umgehen ?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

02.03.2013, 07:20

Ja, z.B. mit der zweiten bereits genannten Methode. Man platziert (per SetWindowLongPtr() mit GWL_USERDATA) einen Pointer auf das mit dem Fenster zu verbindende Objekt im Fenster und verwendet eine Fensterprozedur, die diesen Pointer ausliest und die entsprechende Methode auf dem Objekt aufruft...

Paulm

Frischling

  • »Paulm« ist der Autor dieses Themas

Beiträge: 69

Wohnort: Baden-Württemberg

Beruf: Schüler

  • Private Nachricht senden

13

03.03.2013, 18:05

ok
Ich schreibe gerade eine Fensterklasse die unteranderem eine Memberfunktion hat die WndClassEx initialisiert, nun habe ich jedoch das Problem dass dieser Funktion nicht der Name der WindowsProzedur bekannt istund somit einen Fehler beim kompilieren liefert.
Was für einen Datentyp oder so hat der Name der WindowsProzedur der in die WndClassEx gespeichert wird?
oder wie kann man das Problem sonst lösen?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

03.03.2013, 20:40

Kannst du das Problem mit etwas Code illustrieren? Mir ist nicht ganz klar, wovon genau du sprichst...

Paulm

Frischling

  • »Paulm« ist der Autor dieses Themas

Beiträge: 69

Wohnort: Baden-Württemberg

Beruf: Schüler

  • Private Nachricht senden

15

04.03.2013, 21:46

Hier die .cpp meiner Klasse




C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "WndClass.h"
#include <Windows.h>

// Memberfunktionen


// Fensterklasse initialisieren und registrieren

bool CWnd::InitWndClassEx ( WNDCLASSEX *WndClassEx, HINSTANCE hInstance, const char szClassName[], const char szTitle[] ) {

    WndClassEx->cbSize          = sizeof( WNDCLASSEX );
    WndClassEx->style           = NULL;
    WndClassEx->lpfnWndProc     = WndProc;    //WndProc rot unterstrichen weil der Klasse die WindowProzedur ja nicht bekannt ist
    WndClassEx->cbClsExtra      = NULL;
    WndClassEx->cbWndExtra      = NULL;
    WndClassEx->hInstance       = hInstance;
    WndClassEx->hIcon           = NULL;
    WndClassEx->hCursor         = NULL;
    WndClassEx->hbrBackground   = ( HBRUSH ) GetStockObject(GRAY_BRUSH);
    WndClassEx->lpszMenuName    = NULL;
    WndClassEx->lpszClassName   = szClassName;
    WndClassEx->hIconSm         = LoadIcon( NULL, IDI_ASTERISK );

    if( !RegisterClassEx( WndClassEx ) ){       
        MessageBox( NULL, "Register Class failed.", "Register-Error", MB_OK );
        return false;
    }
}


// Fenster zentrieren

void CWnd::CenterWindow ( HWND hWnd ) {

    int cx = GetSystemMetrics( SM_CXSCREEN );       // Breite des Bildschirms ermitteln
    int cy = GetSystemMetrics( SM_CYSCREEN );       // Höhe des Bildschirms ermitteln

    int px = ( cx - m_width ) / 2;
    int py = ( cy - m_height ) /2;

    MoveWindow( hWnd, px, py, m_width, m_height, false );
}


Muss ich das "WndProc" casten sodass ich es (" WndProc") in WndClassEx.lpnfWndProc speichern kann?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

04.03.2013, 21:55

Wieso genau ist InitWndClassEx eine eigene Methode und wieso bekommt sie einen Pointer auf eine WNDCLASSEX übergeben? Was genau ist WndProc?

Paulm

Frischling

  • »Paulm« ist der Autor dieses Themas

Beiträge: 69

Wohnort: Baden-Württemberg

Beruf: Schüler

  • Private Nachricht senden

17

04.03.2013, 22:09

Das mit dem Pointer ist ein Fehler, ich hab das aus meinem Programm ohne Klasse herauskopiert und abgeändert und dann das womöglich übersehen
Der Klasse ist die Struktur WndClassEx natürlich bekannt.

WndProc ist der Name meiner Window Prozedur (LRESULT CALLBACK WndProc(...)) den ich in der Struktur speichern muss.

Und die Funktion zur Übersicht. Obwohl es wie ich gerade merke unsinnig ist da ich diese ja individuell anpassen muss.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

18

05.03.2013, 01:41

Mir ist klar, dass WndProc der Name deiner Window Prozedur ist. Meine Frage ist, worum es sich dabei genau handelt, wenn du meinst, da irgendwas casten zu müssen. Aber um deine Frage zu beantworten: Nein, wenn du da was casten musst, dann machst du was falsch...

Paulm

Frischling

  • »Paulm« ist der Autor dieses Themas

Beiträge: 69

Wohnort: Baden-Württemberg

Beruf: Schüler

  • Private Nachricht senden

19

08.03.2013, 18:54

Ich hab es selber hingekriegt :D

Ich habe Internet gesucht finde jedoch keine Antwort auf die Frage wie man ein ChildWindow innaktiv setzen kann, weißt du (ich danke ja :)) wie so etwas realisiert?

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

20

08.03.2013, 19:02

Was genau meinst du mit "inaktiv setzen"? Falls du einem anderen Fenster bzw. Control den Fokus zuweist, verliert das derzeit fokussierte Control den Fokus (d.h. wird inaktiv).

Evtl. ist http://msdn.microsoft.com/en-us/library/…1(v=vs.85).aspx oder http://msdn.microsoft.com/en-us/library/…2(v=vs.85).aspx was du suchst.

Werbeanzeige