背景
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 就是我的全屏分辨率,数据正确, 散会!(:з」∠)