C语言 未接收WM_显示更改

u5rb5r59  于 2023-01-04  发布在  其他
关注(0)|答案(2)|浏览(125)

我创建了一个简单的窗口来接收消息:

CreateWindow(L"MyClass", 0, 0, 0, 0, 0, 0, HWND_MESSAGE, 0, 0, 0);

我对WM_DISPLAYCHANGE很感兴趣,它可以检测显示器何时插入/拔出,但我从来没有收到消息。我的窗口收到其他消息,但从来没有WM_DISPLAYCHANGE。为什么?

nue99wik

nue99wik1#

这可能与此有关:
仅消息窗口

  • message-only* 窗口允许您发送和接收消息。它不可见、没有Z顺序、不能枚举并且不接收广播消息。该窗口仅调度消息。
hs1ihplo

hs1ihplo2#

也许你应该满足以下两个条件,如果你想从Windows接收WM_DISPLAYCHANGE消息:
1.顶级窗口,您应该创建一个hwndParent参数为NULL或HWND_DESKTOP的窗口
1.消息循环,就像这样:

MSG msg;
while (GetMessage(&msg, nullptr, 0, 0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

我已经测试了禁用消息循环,例如在消息循环之前使用while(1) {},在这种情况下,当分辨率更改时,我无法接收WM_DISPLAYCHANGE。

相关问题