背景
Windows 有一个消息叫 WM_DISPLAYCHANGE ,在 MSDN 的介绍是:
显示分辨率更改后,WM_DISPLAYCHANGE消息将发送到所有窗口。窗口通过其WindowProc函数接收此消息。
LRESULT CALLBACK WindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
我们要做的就是在 MFC 程序中注册这个消息的消息处理函数。
步骤
打开 MFC 的类向导 - 消息 - 添加自定义消息

为什么不直接搜这个宏?因为 MFC 的类向导里没有…具体原因不清楚!

这样写

来到代码位置,写两行测试代码
afx_msg LRESULT CTestMFC1Dlg::OnDisplaychange(WPARAM wParam, LPARAM lParam)
{
MessageBox(L"WM_DISPLAYCHANGE", L"", NULL);
INT x = GetSystemMetrics(SM_CXSCREEN);
INT y = GetSystemMetrics(SM_CYSCREEN);
return 0;
}
验证效果
在写代码的位置下个断点,运行程序,并最大化显示窗口

此时消息已经捕获,向下 f10 观察 xy的值

1920x1080 就是我的全屏分辨率,数据正确, 散会!(:з」∠)
本文介绍了如何在MFC程序中捕获并处理Windows系统的WM_DISPLAYCHANGE消息,该消息会在显示分辨率发生变化时触发。通过示例代码展示了如何注册消息处理函数,并获取新的屏幕分辨率。

3447

被折叠的 条评论
为什么被折叠?



