DLGPROC als CALLBACK in einer Klasse
-
Hi, ich kriege es nicht hin die DlgProc für ein Fenster in eine Klasse zu packen. Wenn ich das ausserhalb der Klasse benutze funktioniert es wunderbar:
Hier der Codeteil:
class MD { public: ... BOOL DisplayOwnWindow(VOID); BOOL CALLBACK DlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); ... private: HINSTANCE wndInstance; }; extern MD *md = new MD; BOOL CALLBACK MD::DlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: return TRUE; case WM_DESTROY: PostQuitMessage(0); return TRUE; case WM_CLOSE: PostQuitMessage(0); return TRUE; case WM_TIMER: return TRUE; } return FALSE; } BOOL MD::DisplayOwnWindow(VOID) { DialogBox(GetCurrentWindowInst(), MAKEINTRESOURCE(IDD_MAINDLG), 0, DlgProc); }Im oberen Code kriege ich die Meldung:
c:\Proj\GHT\mdump\mdump.cpp(35) : error C4867: 'MDump::MDumpDlg': function call missing argument list; use '&MDump::MDumpDlg' to create a pointer to member
c:\Proj\GHT\mdump\mdump.cpp(35) : error C2664: 'DialogBoxParamA' : cannot convert parameter 4 from 'BOOL (__stdcall *)(HWND,UINT,WPARAM,LPARAM)' to 'DLGPROC'wenn ich DlgProc auf "DLGPROC" beim Aufruf von DialogBox caste bekomme ich:
c:\Proj\GHT\mdump\mdump.cpp(35) : error C2440: 'type cast' : cannot convert from 'overloaded-function' to 'DLGPROC'
wie gesagt, wenn ich die DlgProc ausserhalb der Klasse ablege funktioniert es.
Ich hoffe mir kann hierbei jemand helfen.
-
in der forensuche "wndproc klasse" findest du die lösung

-
ok thx. Es hat lediglich das Schlüsseltwort "static" gefehlt

-
cfk schrieb:
ok thx. Es hat lediglich das Schlüsseltwort "static" gefehlt

wenn man aber _nur_ static anwendet, hat man eine DWNDPROC für alle objekte