我将此代码用于主循环(我的函数):
while (running)
{
if(is_close)
{
Log().push_log("close", "message close!", logInfo);
running = active = false;
break;
}
while (PeekMessage(&msg, g_hWnd, 0, 0, PM_REMOVE))
{
std::cout << "Wnd: " << msg.message << std::endl;
if (msg.message == WM_QUIT || msg.message == WM_DESTROY || msg.message == WM_CLOSE)
{
MessageBox(0, "Hello, World", "Hello", MB_OK);
running = false;
}
// TranslateMessage(&msg);
DispatchMessage(&msg);
}
if (running && active)
render.DrawObject(g_hDC);
}
Run Code Online (Sandbox Code Playgroud)
那么,我使用WndProc:
LRESULT CALLBACK GLWindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
std::cout << "Wnd Proc: " << msg << std::endl;
return DefWindowProc(hWnd, msg, wParam, lParam);
}
Run Code Online (Sandbox Code Playgroud)
当我试图获取消息WM_QUIT时WM_DESTROY,或者WM_CLOSE在我的函数中,它不起作用.我的功能没有看到消息.
我该怎么收到这条消息?
PeekMessage或GetMessage将仅返回使用PostMessage()发布到消息队列的消息.这永远不会是WM_CLOSE或WM_DESTROY,这些消息与SendMessage()一起发送,直接传递给窗口过程而不进入消息队列.除非你的代码中有一个PostQuitMessage()调用,否则你不会得到WM_QUIT.
你真的必须为你的主窗口编写一个窗口过程.简单地处理WM_DESTROY并调用PostQuitMessage(0)就足够了.
LRESULT CALLBACK GLWindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
if (msg == WM_DESTROY) PostQuitMessage(0);
return DefWindowProc(hWnd, msg, wParam, lParam);
}
Run Code Online (Sandbox Code Playgroud)
你现在可以在游戏循环中获得WM_QUIT.
| 归档时间: |
|
| 查看次数: |
3275 次 |
| 最近记录: |