我的Win32应用程序不会退出主循环
发布时间:2020-12-14 04:15:58 所属栏目:Windows 来源:网络整理
导读:这是我的主循环: while(TRUE) { PeekMessage(msg,hWnd,PM_REMOVE); if (msg.message==WM_QUIT) break; TranslateMessage(msg); DispatchMessage(msg); } 这是我的回调程序: LRESULT CALLBACK WinProc(HWND hWnd,UINT msg1,WPARAM wParam,LPARAM lParam) {
这是我的主循环:
while(TRUE) { PeekMessage(&msg,hWnd,PM_REMOVE); if (msg.message==WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg); } 这是我的回调程序: LRESULT CALLBACK WinProc(HWND hWnd,UINT msg1,WPARAM wParam,LPARAM lParam) { switch(msg1) { case WM_DESTROY : { PostQuitMessage(0); return 0; } break; } return DefWindowProc(hWnd,msg1,wParam,lParam); } 我发现当我按下关闭按钮时,下一个循环中的PeekMessage函数将返回WM_NCLBUTTONDOWN,而没有WM_QUIT!
correct way做一个消息循环是
BOOL bRet; MSG msg; while ((bRet = GetMessage(&msg,0)) != 0) { if (bRet == -1) { // handle the error and possibly exit } else { TranslateMessage(&msg); DispatchMessage(&msg); } } 如果你真的需要,你可以使用PeekMessage ……但为什么你忽略了返回值? 另请注意,这是特定于窗口的.我相信PostQuitMessage是一个线程…我不记得它在我的头顶,但你可能需要传递NULL而不是hWnd. 如果你有任何其他窗口,也可能劫持他们的消息循环 – 我不认为这通常是一个问题,但它可能是一个;记在脑子里. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-xp – 可以恢复Active Directory中的密码更改吗?
- winapi – 如何将密钥笔划发送到窗口而不必使用Windows API
- 飞溅屏幕 – 通用窗口10个应用程序的Splash屏幕
- 如何找到WINDOWS-1252字符的内部代码表示?
- Windows Server 2008搭建web服务
- windows – IE6 IE7在干净的XP安装上
- Windows(Services for Unix)NFS客户端“足够好”吗?
- 系统任务栏图标透明且无法打开解决办法 for Windows
- 单元测试 – Windows Phone开发和单元测试
- 在Windows下使用gcc安装gtk并进行编译?