Window Proc in eine klasse bekommen? omfg.



  • Hi,

    ich versuch nun seit 2 stunden vergebends diese WindowProc in eine klasse zu bekommen!

    Ich hatte mir das so gedacht, für das gesamte Programm gibt es eine klasse "application" und für ein fenster die klasse "window", doch der mist will nicht richtig!

    Hier erstmal code:

    class application
    {
    public:
            // Con- und Destructor
        application     (void);
        ~application    (void);
    
        int                     init        (HINSTANCE__ *Instance, char *cmdLine, int cmdShow);
    
        static LRESULT CALLBACK windowProc  (HWND__ *hWnd, unsigned int message, WPARAM wParam, LPARAM lParam);
    
    private:
        HINSTANCE__     *m_instance;
        window m_app;
    };
    
    class window 
    {
    public:
       window ();
       ~window ();
    
       bool initPopup (WNDPROC wndProc, HINSTANCE hInst, int iInitShow, int iWidth = 800, int iHeight = 600) ;
    
    private:
       HWND           m_hwnd;
       HINSTANCE      m_hinst;
       WNDPROC        m_wndProc;
    };
    
    // -----------------------------------------------------------------------
    
    application::application (void) : m_instance (NULL)
    {
    }
    
    application::~application (void)
    {
    }
    
    int application::init (HINSTANCE__ *Instance, char *cmdLine, int cmdShow)
    {
        m_instance = Instance;
        MSG             msg;
    
        m_win.initPopup (windowProc, Instance, cmdShow);
    
        while (1)
        {
    	    if(::GetMessage (&msg, NULL, 0, 0))
            {
                if (msg.message == WM_QUIT)
                {
                    break;
                }
                ::TranslateMessage (&msg);
                ::DispatchMessage (&msg);
            }
        }
    
        return 0;
    }
    
    LRESULT CALLBACK application::windowProc (HWND__ *hWnd, unsigned int message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
    	    {
            case WM_KEYDOWN:
    	        switch(wParam)
                {
                case VK_ESCAPE:
                    ::PostQuitMessage (0);
                    return 0;
    
                default:break;
                }
            break;
    
     	    case WM_DESTROY:
                ::PostQuitMessage (0);
                return 0;
    
            default:break;
        }
        return ::DefWindowProc (hWnd, message, wParam,lParam);              
    }
    

    teile vom code habe ich raus gelassen! Jedoch beim starten bekomm ich ein Schwarzes fenster (gut so solls sein!) aber ich habe keine kontrolle über das fenster! Nur mit Alt+F4 kann ich was regeln! Escape und co kannste knicken.

    Wie packe ich diese windowProc richtig in eine klasse?



  • Wie wärs wenn du mal die Suche benutzen würdest? Bei deinem Code haste übrigens den wahrscheinlich wichtigstens Teil rausgelassen, wie du die Fensterklasse registrierst!
    GUCKST DU HIER:

    http://www.c-plusplus.net/forum/viewtopic.php?t=39356



  • fensterklasse ist registriert.



  • Kommt er denn in deine MessageProc?!



  • nein 😞



  • Dann solltest du mal den Code zum registrieren der Fensterklasse und erstellen des Fensters herzeigen - wenn er die WndProc gar nicht verwendet, dann kannst du dort natürlich auch schlecht Nachrichten abfangen 😉


Anmelden zum Antworten