Hallo,
Ik moest als opdracht voor een Game Engine een "window manager" maken waarin een gebruiker meerdere windows kan open maken. Het probleem is dat ik niet bepaald heb kunnen begrijpen waarom het mij niet lukt.
Ik had eerst Besloten om in de Window Manager de "globale" Message Queue te geven, helaas om een of andere rede werkt de HWND pointer niet goed en geeft hij in de debugger aan dat het niet goed wordt gevuld. De leraar die ons begeleid kon het probleem zelf ook niet vinden, hij wou ook niet de oplossing tot het probleem geven omdat we het zelf moeten leren. Mijn groep zit momenteel ook vast ermee, en andere mensen hebben dit onderdeel geskippen en zijn verder gegaan met de object manager zelf.
Basically is het programma als volgt opgezet, eerst wordt de Windowsmanager opgestart met Winmain, daarin is een WNDCLASS die een keer wordt aangemaakt, met een Hinstance die dan in een Linked list moest worden gezet, als een test hebben we een for loop gemaakt waarin de meerdere windows worden aangemaakt, in de Window.cpp zelf wordt er dan uiteindelijk de window gecreate. Maar om een of andere rede komt die HWND niet goed uit de debugger. Ik heb op google gezocht, maar ik kon helaas niks vinden over hoe je een multiple Window scherm moest maken, alleen was er een artikel op Gamedev,maar die leek heel erg incompleet te zijn. Ik hoop dat iemand weet wat ik fundamenteel fout aan het doen ben, ik weet dat de code waarschijnlijk erg brak is, maar dat boek van petzold helpt ook niet helaas
Ik hoef geen code die werkt, maar het zou fijn zijn als ik een beetje in de goede richting wordt geholpen want ik ben nu al 12 uur bezig met deze opdracht
Alvast bedankt !
Wijnand
Window_Manager.h
Window Manager.cpp
Window.h
Window.cpp
Ik moest als opdracht voor een Game Engine een "window manager" maken waarin een gebruiker meerdere windows kan open maken. Het probleem is dat ik niet bepaald heb kunnen begrijpen waarom het mij niet lukt.
Ik had eerst Besloten om in de Window Manager de "globale" Message Queue te geven, helaas om een of andere rede werkt de HWND pointer niet goed en geeft hij in de debugger aan dat het niet goed wordt gevuld. De leraar die ons begeleid kon het probleem zelf ook niet vinden, hij wou ook niet de oplossing tot het probleem geven omdat we het zelf moeten leren. Mijn groep zit momenteel ook vast ermee, en andere mensen hebben dit onderdeel geskippen en zijn verder gegaan met de object manager zelf.
Basically is het programma als volgt opgezet, eerst wordt de Windowsmanager opgestart met Winmain, daarin is een WNDCLASS die een keer wordt aangemaakt, met een Hinstance die dan in een Linked list moest worden gezet, als een test hebben we een for loop gemaakt waarin de meerdere windows worden aangemaakt, in de Window.cpp zelf wordt er dan uiteindelijk de window gecreate. Maar om een of andere rede komt die HWND niet goed uit de debugger. Ik heb op google gezocht, maar ik kon helaas niks vinden over hoe je een multiple Window scherm moest maken, alleen was er een artikel op Gamedev,maar die leek heel erg incompleet te zijn. Ik hoop dat iemand weet wat ik fundamenteel fout aan het doen ben, ik weet dat de code waarschijnlijk erg brak is, maar dat boek van petzold helpt ook niet helaas
Alvast bedankt !
Wijnand
Window_Manager.h
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| #include <windows.h> #include "window.h" class Window_Manager { public: // de Message Queue van Windhoos void addWindow(); Window_Manager(); // c'tor virtual ~Window_Manager(void); // d'tor private: void* listStart; }; |
Window Manager.cpp
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
| #include "Window_Manager.h" HINSTANCE hInst = 0; struct WindowList { Window* wnd; WindowList* lNext; }; LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch( msg ) { // Handle left mouse button click message. case WM_LBUTTONDOWN: MessageBox(0, TEXT("WM_LBUTTONDOWN message."), TEXT("Msg"), MB_OK); return 0; // Handle destroy window message. case WM_DESTROY: PostQuitMessage(0); return 0; } // Forward any other messages we didn't handle to the // default window procedure. return DefWindowProc(hWnd, msg, wParam, lParam); } Window_Manager::Window_Manager() { this->listStart = NULL; } void Window_Manager::addWindow() { WNDCLASSEX wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = NULL; wc.hCursor = NULL; wc.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH); wc.lpszMenuName = 0; wc.lpszClassName = TEXT("Vyper"); RegisterClassEx(&wc); WindowList* nWnd = new WindowList; WindowList* sWnd = reinterpret_cast<WindowList*> (this->listStart); nWnd->wnd = new Window(wc, 100, 100, 300, 300); nWnd->lNext = NULL; if (this->listStart == NULL) this->listStart = nWnd; else if (sWnd->lNext == NULL) sWnd->lNext = nWnd; else { while (sWnd->lNext != NULL) sWnd = sWnd->lNext; sWnd->lNext = nWnd; } } Window_Manager::~Window_Manager() { } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { hInst = hInstance; Window_Manager* wm = new Window_Manager(); for (int i = 0; i < 3; i++) { wm->addWindow(); } } |
Window.h
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| #include <windows.h> class Window { public: Window(); // default c'tor Window(WNDCLASSEX wc, int x, int y, int width, int height); // specific c'tor virtual ~Window(); // d'tor //bool getFocus(); //void setFocus(bool hasFocus); private: HWND hWnd; WNDCLASSEX wc; //bool hasFocus; }; |
Window.cpp
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| #include "Window_Manager.h" Window::Window(WNDCLASSEX wc, int x, int y, int width, int height) { this->wc = wc; this->hWnd = CreateWindow(TEXT("test"), TEXT("Vyper"), WS_OVERLAPPEDWINDOW, x, y, width, height, NULL, NULL, wc.hInstance, NULL); ShowWindow(this->hWnd, SW_SHOWDEFAULT); UpdateWindow(this->hWnd); } Window::~Window() { } |
[ Voor 1% gewijzigd door RobIII op 27-11-2006 21:47 . Reden: Code=C++ van gemaakt. Syntax-highlighting FTW \O/ ]