Zugriff auf Methoden einer OpenGL Klasse



  • Hi,

    ich habe eine Frage:

    Ich habe 2 Klassen.

    Klasse 1 ist meine OpenGL Klasse, die einen Würfel zeichnet. In dieser Klasse befindet sich die

    LONG WINAPI MainWndProc (HWND hWnd, UINT uMsg, WPARAM  wParam, LPARAM  lParam)
    

    Methode, um zB auf Tastendrücke zu reagieren.

    Klasse 2 instanziiert und startet Klasse 1:

    #include <windows.h>
    #include <gl/gl.h>
    #include <gl/glu.h>
    #include "Cube.h"
    
    Cube myCube;
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    	myCube.go(hInstance, nCmdShow);
            //der folgende Aufruf wird nie ausgeführt
            myCube.rotate();
    }
    

    Die Cube.go() sieht so aus:

    int Cube::go(HINSTANCE hInstance, int nCmdShow) {
    
        const LPCWSTR appname = TEXT("OpenGL Sample");
    
        WNDCLASS wndclass;
        MSG      msg;
    
        // Define the window class
        wndclass.style         = 0;
        wndclass.lpfnWndProc   = (WNDPROC)MainWndProc;
        wndclass.cbClsExtra    = 0;
        wndclass.cbWndExtra    = 0;
        wndclass.hInstance     = hInstance;
        wndclass.hIcon         = LoadIcon(hInstance, appname);
        wndclass.hCursor       = LoadCursor(NULL,IDC_ARROW);
        wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
        wndclass.lpszMenuName  = appname;
        wndclass.lpszClassName = appname;
    
        // Register the window class
        if (!RegisterClass(&wndclass)) return FALSE;
    
        // Create the window
        hWnd = CreateWindow(
                appname,
                appname,
                WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
                CW_USEDEFAULT,
                CW_USEDEFAULT,
                800,
                600,
                NULL,
                NULL,
                hInstance,
                NULL);
    
        if (!hWnd) return FALSE;
    
        // Initialize OpenGL
    	Cube::InitGraphics();
    
        // Display the window
        ShowWindow(hWnd, nCmdShow);
        UpdateWindow(hWnd);
    
        // Event loop
        while (1)
        {
            if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) == TRUE)
            {
                if (!GetMessage(&msg, NULL, 0, 0)) return TRUE;
    
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
    		Cube::DrawGraphics();
        }
    
            wglDeleteContext(hRC);
            ReleaseDC(hWnd, hDC);
    }
    

    In der Cube-Klasse habe ich eine Methode rotate(), die den Würfel rotieren lassen soll. Mein Problem ist nun, dass diese Methode anscheinend nicht aufgerufen wird, bis ich das Fenster, was ich mit myCube.go zeichne, geschlossen wird.

    Wie könnte man das korrekt lösen, damit ich die myCube.rotate(); aufrufen kann?

    Grüße
    Alex



  • Mein Problem ist nun, dass diese Methode anscheinend nicht aufgerufen wird.
    Wie könnte man das korrekt lösen?

    Vorher keine Endlosschleifen ausfuehren?



  • Jop gerade selbst gefunden.
    Danke


Anmelden zum Antworten