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...

Reply via email to