代码改变世界

[转载]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;


欢迎高手斧正。