WndProc als member einer klasse
-
Ich möchte eine klasse erstellen, welche automatisch ein fenster erstellt.
Das funktioniert auch, jedoch habe ich ein problem mit der WndProc-funktion.
Diese kann ich nämlich nicht übergeben
(m_wc.lpfnWndProc = WndProc;
)
, solange sie eine memberfunktion der klasse ist, sondern erst, wenn ich sie außerhalb definiere.
Ansonsten bekomme ich den folgenden fehler:cwindow.cpp(20): error C3867: "arc::winapi::CWindow::WndProc": Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie "&arc::winapi::CWindow::WndProc", um einen Zeiger auf den Member zu erstellen.
cwindow.cpp(20): error C2440: '=': 'LRESULT (__stdcall arc::winapi::CWindow::* )(HWND,UINT,WPARAM,LPARAM)' kann nicht in 'WNDPROC' konvertiert werden
Egal was ich mache der fehler bleibt, ist es überhaupt möglich die wndproc-funktion in einer klasse zu haben und dann einen pointer auf diese zu übergeben?
bitte um schnelle hilfe, da mein projekt deswegen gerade still steht..
-
Das geht wegen des this Zeigers nicht so einfach.
Guck mal hier http://www.codeproject.com/Articles/17894/Simple-Mapping-of-WndProc-to-your-Specific-Class-W
ist eine Möglichkeit oder guck dir vllt. auch an wie die das hier https://sourceforge.net/projects/win32-framework/ machen.
-
Danke, mit dem ersten Artikle komme ich jedoch irgentwie nicht klar (verstehe den sinn des ganzen nicht) und das zweite gucke ich mal durch, aber es wäre cool wenn ihr mir so eine lösung erklären könntet, weil die in dem projekt bestimmt nicht erklärt drin steht.. ich könnte das dann (wenn ichs überhaupt finde) zwar benutzen, wüsste aber immer noch nicht wie es geht und vor allem warum
-
Um eine Memberfunktion aufrufenzu können benötigt man den "this" Zeiger der Klasseninstanz.
Window-Procs sind aber statische Funktionen. Die dazugehörige Klasseninstanz (Fenster) steckt letzten Endes im Handle des Fensters drin.Also musst Du irgendwie Handle eine Methode schaffen, dass aus der statischen Funktion die aufgerufen wird, die Instanz Deiner Klasse gefunden wird.
Die MFC macht das mit maps. Die ATL verwendet Thunks dafür und erzeugt für jedes Fenstereigene eigene Window-Proc...
-
was ist denn am einfachsten? vorteile, nachteile? und es gibt also keine ganz simple methode?
und hat jemand vielleicht ein paar codeschnippsel?
(ich weiß ehrlich gesagt nichteinmal, was thunks oder maps sindles mir das jetzt mal durch, aber nen bisschen code wäre trotzdem nett, wie gesagt, es hält mein komplettes projekt auf :/)
-
Das geht wegen des this Zeigers nicht so einfach.
Guck mal hier http://www.codeproject.com/Articles/17894/Simple-Mapping-of-WndProc-to-your-Specific-Class-Wund was ist jetzt eigentlich hiermit, das verstehe ich irgentwie auch nicht wirklich..
-
gamer8o4 schrieb:
Das geht wegen des this Zeigers nicht so einfach.
Guck mal hier http://www.codeproject.com/Articles/17894/Simple-Mapping-of-WndProc-to-your-Specific-Class-Wund was ist jetzt eigentlich hiermit, das verstehe ich irgentwie auch nicht wirklich..
Was damit ist - da wird das erklärt, was du vorhast - Schritt für Schritt.
-
Sorry für meine Dummheit ^^ habs jetzt, war irgentwie mit den gedanken woanders..
hat perfekt funktioniert, danke
-
-
?
ich habs jetzt !!