[转载]windows mobile获取菜单栏,标题栏,窗口高度
2010-12-10 09:18 zlty 阅读(828) 评论(0) 编辑 收藏 举报导读:主要是使用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;
欢迎高手斧正。