als WndProc eine Klassenmethode angeben
-
Hi
Ich war ein wenig unentschlossen ob dieses Thema nicht eher in C++ reingehört und hoffe das meine Entscheidung nicht falsch war
Folgendes Problem:
Eine Klasse von mir soll bei Bedarf ein voll funktionsfähiges Fenster anzeigen. Beim Initialisieren der WNDCLASSEX bin ich jedoch auf ein Problem gestossen. Folgender Code:wcex.lpfnWndProc = (WNDPROC)this->WndProc;funktioniert leider nicht und gibt folgenden Fehler aus:
error C2440: 'Typumwandlung': 'overloaded-function' kann nicht in 'WNDPROC' konvertiert werden
Keine Funktion mit diesem Namen im Gültigkeitsbereich stimmt mit dem Zieltyp übereinDie Methode selbst definierte ich als:
LRESULT CALLBACK MeineKlasse::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)Hat jemand eine Idee wie ich es hinbekomme dass ich diese Memberfunktion als gültige WndProc eintragen kann?
Peter
P.S. Von MFC, etc möchte ich erstmal absehen
-
Dazu musst Du das "Windows-System" in Klassen kapseln, was die MFC und diverse anderen Frameworks machen (wxWidgets).
Für einen Ansatz siehe:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-149120.html
-
petern schrieb:
Hat jemand eine Idee wie ich es hinbekomme dass ich diese Memberfunktion als gültige WndProc eintragen kann?
Das geht nicht, da Memberfunktionen und Non-Memberfunktionen nicht kompatibel sind. Wie im anderen Thread bereits steht, du musst die Funktion static machen. Und damit du auf Klassenmember zugreifen kannst, brauchst du einen this Zeiger. Diesen kannst du dir mittels SetWindowLongPtr und GWLP_USERDATA beim Erstellen des Fensters in WM_CREATE merken (lpParam bei CreateWindow nutzen). Und mit GetWindowLongPtr und GWLP_USERDATA in deiner WndProc wieder auslesen.