PostQuitMessage(0) 不会终止我的"程序"
PostQuitMessage(0) won't terminate my 'program'
我只是想学习一点C++,写了几行除了打开一扇窗之外什么都不做。 我也添加了一个消息处理程序,通过单击窗口上的 [X],它会按预期关闭。 下一步,我希望程序在单击[X]时终止,但它没有这样做。 这是我的代码:
#include <Windows.h>
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
switch (msg){
case WM_CLOSE:
PostQuitMessage(88);
break;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE pPrevInstance, LPSTR lpCmdLine, int cCmdShow) {
const auto pClassName = "M3D";
WNDCLASSEX wc = { 0 };
wc.cbSize = sizeof(wc);
wc.style = CS_OWNDC;
wc.lpfnWndProc = DefWindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = nullptr;
wc.hCursor = nullptr;
wc.hIcon = nullptr;
wc.hCursor = nullptr;
wc.hbrBackground = nullptr;
wc.lpszMenuName = nullptr;
wc.lpszClassName = pClassName;
RegisterClassEx(&wc);
HWND hWnd = CreateWindowEx(0, pClassName, "Fenster M3D", WS_CAPTION | WS_MAXIMIZEBOX | WS_SYSMENU, 200, 200, 640, 480, nullptr, nullptr, hInstance, nullptr);
//Fenster aufrufen
ShowWindow(hWnd, SW_SHOW);
//
//message Pumpe
MSG msg;
while (GetMessage(&msg,nullptr,0,0) > 0){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
谁能告诉我出了什么问题,为什么我的PostQuitMessage((不能完成它的工作? 我发现的其他线程并没有真正帮助
问题出在这个作业上:
wc.lpfnWndProc = DefWindowProc;
您告诉消息循环将消息直接分派给DefWindowProc()
,因此永远不会使用您的自定义WndProc()
,因此永远不会调用PostQuitMessage()
。DefWindowProc()
不会为其处理的任何消息调用PostQuitMessage()
。
将该分配改为更改为以下内容:
wc.lpfnWndProc = WndProc;
此外,根据 MSDN 上的关闭窗口文档,DefWindowProc()
在处理WM_CLOSE
时调用DestroyWindow()
,因此您应该改为调用PostQuitMessage()
来回复WM_DESTROY
:
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
switch (msg){
case WM_DESTROY:
PostQuitMessage(88);
break;
}
return DefWindowProc(hWnd, msg, wParam, lParam);
}
相关文章:
- 如何改进我的代码,使其不会因超时而终止?(黑客排名挑战)
- 为什么我的 while 函数没有终止?
- 为什么我的显示功能会终止程序?
- PostQuitMessage(0) 不会终止我的"程序"
- 这是我的 .h 文件的一些错误,当我在其中包含我的类模板时,它显示 [错误] 未终止 #ifndef
- 当我输入非整数值时,我的二次方程代码终止,如何让它正确循环?
- 为什么我的 C++ 应用以退出值 -1 终止,但某些代码逻辑未执行?
- 我正在尝试计算 char 数组中的内容,直到 null 终止,但每次编译时,我都会得到一个比我的数组大的数字
- 为什么我的析构函数中的异常没有触发 std::终止?
- 尝试将未知数量的字符串推送到向量中,但我的 cin 循环没有终止
- 我的链接列表程序在代码块编译器(X0000000005)中以状态-1073741819终止
- 对我是否需要一个哨兵值来终止我的 do while 循环以允许多个条目感到困惑
- 为什么我的 c++ 程序在 Eclipse 中没有输出而终止,但在 Visual Studio 中工作
- 为什么我的程序在执行后立即终止
- 为什么我的简单C++项目在我可以看到之前就终止于日食?我如何让它停止
- 我的Qt C++程序以一种不同寻常的方式终止
- 当我采用测试用例数 = 1 时,我的程序终止.其他明智的是,它给出了正确的答案,但跳过了最后一个测试用例
- 当我的程序终止时,我应该总是在COM指针上调用Release吗
- 如何通过按特殊字符"!"在 c++ 上终止我的程序?
- 我如何终止我的程序使用ESC按钮