On Friday, 13 August 2021 at 03:05:22 UTC, Mike Parker wrote:
On Friday, 13 August 2021 at 00:30:59 UTC, Ruby The Roobster
wrote:
When I run the program and close the window, the program still
runs in background mode. I don't know why this happens nor
how to fix it. Does anybody know what's going on?
frame beat me to it, but it may well be that you're getting -1.
[The documentation][1] says that a window that has already been
destroyed will result in the `hWnd` parameter being invalid,
which will cause the function to return -1.
[1]:
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getmessage#return-value
So I edited the message loop:
```d
while((b = GetMessage(&msg,hwnd,0,0)) != 0) {
if(exit || b == -1) {
return msg.wParam;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
```
And some of the WndProc:
```d
extern(Windows)
LRESULT WndProc(HWND hwnd, UINT msg, WPARAM wparam,
LPARAM lparam) nothrow {
switch(msg) {
case WM_CREATE:
//...
return 0;
break;
case WM_CLOSE:
DestroyWindow(hwnd);
try {
entity.terminate();
exit = true;
}
catch(Throwable e){
}
break;
case WM_DESTROY:
try {
entity.terminate();
exit = true;
}
catch(Throwable e) {
PostQuitMessage(1);
}
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,msg,wparam,lparam);
}
return 0;
}
```
It still produces the same result(the program never exits), so it
doesn't look like GetMessage() is returning -1...