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...


Anmelden zum Antworten