- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好的,我有了我的主窗口过程(简化):
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
{
if(!loadFiles())
SendMessage(hwnd, WM_CLOSE, 0, 0);
}
break;
case WM_CLOSE:
DestroyWindow(hwnd);
return 0;
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
loadFiles() 是读取一些文本文件的函数。如果文件丢失,它会发布一条错误消息,然后返回 false。我通过发送 WM_CLOSE 消息来处理这个问题,该消息发送 WM_DESTROY?该程序调用 PostQuitMessage(0) 并且......什么都没有。该进程仍在后台,现在在核心 1 上使用 100% CPU。这是我的消息循环:
MSG Msg;
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
很简单,我环顾四周,看到人们使用各种不同的循环,大多数使用 PeekMessage() 函数。值得注意的是我有几个包含不同控件的子窗口,当用户选择时显示和隐藏它们不同的选项卡,但我认为这不重要,因为 PostQuitMessage(0) 应该将 WM_QUIT 发布到消息队列,这也会破坏子窗口,对吧?有什么帮助吗?谢谢
最佳答案
根据 MSDN WM_CREATE
在 CreateWindow
期间发送。所以你在创建过程中就破坏了窗口。我不确定这是否可行。还有,为什么这么复杂?文档说
If an application processes this message, it should return zero to continue creation of the window. If the application returns –1, the window is destroyed and the CreateWindowEx or CreateWindow function returns a NULL handle.
因此,如果 loadFiles()
失败,只需返回 -1 并相应地处理 CreateWindow
返回 NULL
。
关于winapi - C++ Win32 PostQuitMessage(0) 不工作? CPU @ 100%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16291807/
有什么区别 case WM_DESTROY: PostQuitMessage(WM_QUIT); break; 和 case WM_DESTROY: PostQuitMessa
我试图在 win32 中编写 hello world 但是当我关闭主窗口时,应用程序继续运行 我的窗口过程: LRESULT CALLBACK MainWndProc(HWND hWnd, UINT
与许多应用程序一样,我的应用程序创建了多个窗口。我不知道也无法跟踪创建了多少个窗口,所以我不知道什么时候没有窗口。 我的问题是,当所有窗口都关闭时,除非我以某种方式调用 PostQuitMessage
我想知道这两个片段之间是否存在差异: 一个: void main() { // ... while(GetMessage(&msg, NULL, 0, 0)) {
在我的演示应用中 case WM_CLOSE: DestroyWindow(hndl); return 0; 和 case WM_CLOSE: PostQuitMessage(
我正在尝试使用 Win32 API 创建一个非常基本的窗口,我已经很久没有这样做了。 我认为我的消息循环没问题,但是当我关闭打开的窗口时,应用程序仍在运行。看起来消息循环永远不会收到 WM_QUIT
好的,我有了我的主窗口过程(简化): LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
我是一名优秀的程序员,十分优秀!