【发布时间】:2011-04-21 06:13:30
【问题描述】:
我对 WM_ENDSESSION 消息有疑问。也就是说,当 WM_ENDSESSION 消息正在发送时,我想退出应用程序的主循环(WindowProc)......所以,我写了这样的东西:
LRESULT CALLBACK windowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
//...
case WM_QUERYENDSESSION: return TRUE;
case WM_ENDSESSION:
if(wParam) PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,msg,wParam,lParam);
}
return 0;
}
...,但它不起作用 - 应用程序没有退出主循环...
我在 msdn 上阅读了有关 WM_QUERYENDSESSION 和 WM_ENDSESSION 的信息,但找不到任何有用的信息...
知道了,错在哪里?
【问题讨论】:
-
很有趣,我也注意到了,我还以为是我自己。我的目标是保存数据并在收到 WM_QUERYENDSESSION/WM_ENDSESSION 时优雅地退出,尽管我的程序从未保存过任何东西。它总是被冷死。
-
显示你的事件循环代码。我猜它在你的
main函数中。 -
顺便说一句,您如何尝试触发 WM_QUERYENDSESSION/WM_ENDSESSION 事件?关闭?注销?你的
windowProc是顶层窗口的窗口过程吗? -
@Damon:我当然会把 PostQuitMessage 放在 WM_QUERYENDSESSION 中,但这是不正确的解决方案... @Serge Dundich:是的,我的循环在
main: int main() { // Init窗口...味精事件; while(GetMessage(&event,0,0,0)) { TranslateMessage(&event);调度消息(&事件); } //... 返回事件.wParam; } > 您如何尝试触发 WM_QUERYENDSESSION/WM_ENDSESSION 事件?注销。 -
它甚至会在 WM_ENDSESSION 的处理程序处着陆吗?我敢打赌不是。
标签: c++ winapi windows-messages