导读:主要是使用GetSystemMetrics函数,一定要注意原作者的解决方案.(对原文进行了排版.)
转载自http://www.cnblogs.com/want/archive/2010/07/28/1787306.html
之前也是一头雾水,由于现在的项目要求支持多种分辨率,多个WM版本。对此也查了一些资料,一一验证过,刚刚又凑巧遇到一个帖子http://www.zixundao.com/viewthread.php?tid=1424说是不清楚为什么+3。稍微解释了一下,但又觉得此类问题新手容易浪费时间,故做简单总结:
1.获取屏幕的高宽
g_nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
g_nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
这两个肯定不会有误
2.获取标题栏、菜单栏高度
g_nScreenCaption = GetSystemMetrics(SM_CYCAPTION);
g_nScreenMenu = GetSystemMetrics(SM_CYMENU);
PC下肯定可以的,Mobile下因系统版本,屏幕分辨率各有差异,因此建议大家以后不要用GetSystemMetrics来获取。
测验结果(前面的值为使用GetSystemMetrics获取的):
1):
WM6.5 及更早版本
QVGA:
Menu 23 实际26
Caption 23 实际 26
WVGA:
Menu 23 实际52
Caption 46 实际 52
2)WM6.5.3
WM6.0 及更早版本
QVGA:
Menu 23 实际34
Caption 23 实际 18
WVGA:(今天手边没有这种手机。。)
解决方案:
在MFC程序中(一定要在你使对话框全屏之前)
CDialog::OnInitDialog();
//之后加入
CRect ,rect;
GetWindowRect(rect);
g_nScreenCaption = rect.top;
g_nScreenMenu = g_nScreenHeight-rect.bottom;
在Win32程序中(前提创建的窗口是非全屏)
case WM_INITDIALOG:
...
SHInitDialog(&shidi);
RECT rc;
GetWindowRect(hWnd,&rc);
g_nScreenCaption = rc.top;
g_nScreenMenu = g_nScreenHeight-rc.bottom;
欢迎高手斧正。