Zugriff auf Methoden einer OpenGL Klasse

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 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 [cpp]LONG WINAPI MainWndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)[/cpp] Methode, um zB auf Tastendrücke zu reagieren.

    Klasse 2 instanziiert und startet Klasse 1:

    Quellcode

    1. #include <windows.h>
    2. #include <gl/gl.h>
    3. #include <gl/glu.h>
    4. #include "Cube.h"
    5. Cube myCube;
    6. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    7. {
    8. myCube.go(hInstance, nCmdShow);
    9. //der folgende Aufruf wird nie ausgeführt
    10. myCube.rotate();
    11. }
    Alles anzeigen


    Die Cube.go() sieht so aus:

    Quellcode

    1. int Cube::go(HINSTANCE hInstance, int nCmdShow) {
    2. const LPCWSTR appname = TEXT("OpenGL Sample");
    3. WNDCLASS wndclass;
    4. MSG msg;
    5. // Define the window class
    6. wndclass.style = 0;
    7. wndclass.lpfnWndProc = (WNDPROC)MainWndProc;
    8. wndclass.cbClsExtra = 0;
    9. wndclass.cbWndExtra = 0;
    10. wndclass.hInstance = hInstance;
    11. wndclass.hIcon = LoadIcon(hInstance, appname);
    12. wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
    13. wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    14. wndclass.lpszMenuName = appname;
    15. wndclass.lpszClassName = appname;
    16. // Register the window class
    17. if (!RegisterClass(&wndclass)) return FALSE;
    18. // Create the window
    19. hWnd = CreateWindow(
    20. appname,
    21. appname,
    22. WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
    23. CW_USEDEFAULT,
    24. CW_USEDEFAULT,
    25. 800,
    26. 600,
    27. NULL,
    28. NULL,
    29. hInstance,
    30. NULL);
    31. if (!hWnd) return FALSE;
    32. // Initialize OpenGL
    33. Cube::InitGraphics();
    34. // Display the window
    35. ShowWindow(hWnd, nCmdShow);
    36. UpdateWindow(hWnd);
    37. // Event loop
    38. while (1)
    39. {
    40. if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) == TRUE)
    41. {
    42. if (!GetMessage(&msg, NULL, 0, 0)) return TRUE;
    43. TranslateMessage(&msg);
    44. DispatchMessage(&msg);
    45. }
    46. Cube::DrawGraphics();
    47. }
    48. wglDeleteContext(hRC);
    49. ReleaseDC(hWnd, hDC);
    50. }
    Alles anzeigen



    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
  • Habs hinbekommen, und zwar in dem ich folgendes gemacht habe:

    C-Quellcode

    1. #include <windows.h>
    2. #include <gl/gl.h>
    3. #include <gl/glu.h>
    4. #include "Cube.h"
    5. Cube myCube;
    6. MSG msg;
    7. int i = 1;
    8. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    9. {
    10. myCube.go(hInstance, nCmdShow);
    11. while (1)
    12. {
    13. if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) == TRUE)
    14. {
    15. if (!GetMessage(&msg, NULL, 0, 0)) return TRUE;
    16. TranslateMessage(&msg);
    17. DispatchMessage(&msg);
    18. }
    19. if (i==1) myCube.moveright();
    20. myCube.DrawGraphics();
    21. }
    22. }
    Alles anzeigen