WndProc über Instanz in Klasse speichern?



  • Da mein letzter Beitrag keine Antworten bekommen hat, versuche ich es hier nocheinmal...blos diesmal nur ein Problem:

    Ich bin seit laaaaaanger Zeit daran, herauszufinden, wie ich ein Fenster mit DirectX erstellen..... 😞
    Ich hab es bereits einige Male geschafft, leider immer bei verschiedenen Tutorials und das war auch immer sehr durcheinander.
    Also habe ich mich entschlossen, all den Fenster Kram erstmal in eine Klasse zu stecken, um die Ordnung wiederherzustellen.....
    Soweit, so gut...
    Das Problem ist die MndProc oder auch MsgProc. 🙄
    In dem Buch, dessen Code ich als Vorbild für meinen Code benutze wird das Problem,
    dass man die MsgProc nicht ohne weiteres in eine Klasse stecken kann, scheinbar mit ein par Zeilen Code Gelöst:

    namespace
    {
    	// This is just used to forward Windows messages from a global window
    	// procedure to our member function window procedure because we cannot
    	// assign a member function to WNDCLASS::lpfnWndProc.
    	D3DApp* gd3dApp = 0;  // -----> Erstellt eine Instanz der Klasse
    }
    
    LRESULT CALLBACK
    MainWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    	// Forward hwnd on because we can get messages (e.g., WM_CREATE)
    	// before CreateWindow returns, and thus before mhMainWnd is valid.
    	return gd3dApp->MsgProc(hwnd, msg, wParam, lParam);  // -----> Weist irgentwie der Funktion, die an die WNDCLASS übergeben wird, die Funktion der Klasse zu ....?!?.....aha
    }
    

    Meine Frage: Wie kann das gehen? 😕

    Mein PROBLEM: Bei mir geht das nicht.... 😮 (wer hätts gedacht 🙂 )
    Alsoooo: Muss man dazu irgentwas tun? Irgentwelche Einstellungen? Magie? Oder bin ich zu doof zum kopieren?!? (letzteres ist eig. sehr unwahrscheinlich, da das VC++ für mich macht 😃 )

    Nochmal zum Vergleich mein Code:

    namespace
    {
    	BASIC_WINDOW* m_window = 0;
    }
    
    LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    	return m_window->m_WndProc(hWnd, msg, wParam, lParam);
    }
    

    Falls ihr den Code für die Klasse wollt einfach sagen!

    P.S.: Bitte kommt mir nich mit zehntausen Beispielen wie mans nicht macht! Da hab ich schon genug gefunden 😞 . Am besten den besten Weg 😉

    MfG Sky 😉



  • Du solltest erstmal die Grundlagen der Sprache vernünftig lernen, dann würdest du es verstehen. C&P ist nicht programmieren!
    Die Leute hier haben wenig Lust, dich ständig nach deinem Code und deiner Vorgehensweise zu fragen, um am Ende ein absolutes Anfängerproblem zu lösen, das du durch ein wenig Eigenfleiß schnell selbst hättest lösen können (deswegen keine Reaktionen). Das Problem in einem neuen Thread zu wiederholen ist auch nicht die feine Art...



  • So wie ich das sehe erstellst du einen Pointer zu deiner Klasse, ohne von dieser eine Instanz zu erstellen. In der Einstiegsfunktion rufst du über den Pointer der ins nichts zeigt, eine Memberfunktion auf. Das Resultat ist ein Speicherzugriffsfehler. Ich kann nur Wiederholen was mein Vorgänger schon gemeint hat. Lerne erstmal die Sprache mit allen ihren Eigenschaften an Konsolenanwendungen, bevor du dich an die "Königsdisziplin" GUI machst. An dieser Stelle verweise ich gerne auf meine lieblings-c++-Referenz: http://www.cplusplus.com/doc/tutorial/


Log in to reply