GWL_USERDATA
-
Hi,
ich verzweifle noch.... ich bekomme immer den "Debug Fehler 3"
was ist hier faul ???class gui_window_class { protected: static LRESULT CALLBACK win32_static_on_event (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); LRESULT CALLBACK win32_on_event (UINT uMsg, WPARAM wParam, LPARAM lParam); public: gui_window_class (void); ~gui_window_class (); void install (void); HWND hWnd; }; void gui_window_class :: install () { // ..... if (!CreateWindow (win_class_name, '\0', dwStyle, Left, Top, Width, Height, hParent, NULL, hInstance, (void *)this)) { MessageBox(NULL, TEXT ("Failed to create the window."), TEXT ("Error"), MB_OK | MB_ICONEXCLAMATION); } } LRESULT CALLBACK gui_window_class :: win32_static_on_event (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { gui_window_class* wnd = NULL; if(uMsg == WM_CREATE) { LPCREATESTRUCT cs = (LPCREATESTRUCT)(lParam); if(!cs->lpCreateParams) MessageBox(NULL, TEXT ("Debug Fehler 1"), TEXT ("Error"), MB_OK | MB_ICONEXCLAMATION); else SetWindowLong(hWnd, GWL_USERDATA, (long)(cs->lpCreateParams)); wnd = (gui_window_class *)(cs->lpCreateParams); if(!wnd) MessageBox(NULL, TEXT ("Debug Fehler 2"), TEXT ("Error"), MB_OK | MB_ICONEXCLAMATION); else wnd->hWnd = hWnd; } else { wnd = (gui_window_class *)(GetWindowLong(hWnd, GWL_USERDATA)); if (!wnd) MessageBox(NULL, TEXT ("Debug Fehler 3"), TEXT ("Error"), MB_OK | MB_ICONEXCLAMATION); } if (wnd) return wnd->win32_on_event(uMsg, wParam, lParam); else return 0L; // I think, is it right ???????????? } LRESULT CALLBACK gui_window_class :: win32_on_event (UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CLOSE: { PostQuitMessage(0); return 0L; } default: { return DefWindowProc (this->hWnd, uMsg, wParam, lParam); } } }
-
Bist Du sicher, dass Du auf das WM_CREATE mitbekommst???
Die MFC macht das ganz schön miese Tricks damit das mit dem Subclassing noch funktioniert...