WinAPI-Fenster in Klassen kapseln
-
-
static
-
Ich sag nur Thunk-Klasse, static Methoden sind nicht nötig
-
Trotzdem muss dafür eine Window Proc static sein.
-
Nö, es hängt aber auch davon ab welche Thunk-Klasse du benutzt...
Schonmal das hier probiert: http://www.codeproject.com/cpp/thunk.asp?target=CThunk
-
Ich benutze auch eine solche Thunk-Klasse für Fenster.
Wie willst du denn bei der WNDCLASS/EX Struktur den lpfnWndProc Member ausfüllen?
Dafür muss man doch erstmal eine statische Methode bzw. globale Funktion haben. Ansonsten klappt die Zuweisung doch nicht.Und in der statischen Methode gehts dann auf zur richtigen Memberfunktion.
-
Mein Gott, guck dir die Klasse an. Es gibt eine Methode die GetStaticProc heißt. Na, geschnallt? Wenn nicht, übergibst der WNDCLASSEX Structur, dem lpfnWndProc Member Thunk::GetStaticProc(); Da die Klasse eine Template-Klasse ist, muss du auch noch die richtigen Template-Paremeter, beim Instantiieren übergeben. In deinem Fall
CThunk<WNDPROC,pfnProc,Klasse> Proc;
pfnProc ist der Zeiger auf die NICHT-statische Member Funktion deiner Klasse, usw. Auf der von mir geposteten Seite steht alles beschrieben und wie man schön sagt: wer lesen kann ist klar im Vorteil.
-
Danke
Habs nun kappiert und werde es mal ausprobieren.
Kannst du mir noch sagen wie ich das CALLBACK richtig in das typedef für F2 (class function) unterbringe? Hab es bisher noch nicht geschafft.
-
angenommen deine Klasse heißt Window:
//Zeiger auf die Member-Funktion typedef LRESULT (Window::*m_pfnCallback) (HWND,UINT,WPARAM,LPARAM); //Objekt anlegen CThunk<WNDPROC,m_pfnCallback,Window> Proc; //Im Ctor initialisieren, Window::WndProc ist eine Member-Funktion mit dem //Funktionskopf Window::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM); nicht statisch! Proc.Init(WndProc,this);
-
Jo, so hatte ich es auch schon. Aber fehlt da nicht ein CALLBACK/__stdcall?
Die Methode Window::WndProc hat doch die Signatur
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM)
Oder?
-
nein, fehlt nicht. Die Methode bleibt bei thiscall Calling Convention.
-
Ach ja, stimmt. Daran hab ich gar nicht gedacht.
Es hat jedenfalls super geklappt. Danke für deine Hilfe.
Hatte es vorher etwas umständlicher, so wie es hier beschrieben ist: