Windows Mobile屏幕旋转解决方案

在默认情况下,windows mobile的CDialog类可以自动切换屏幕显示方式,在用户把手机屏幕旋转成横屏的时候,CDialog类也会自动旋转,从而使得原本程序的绘制操作变乱。

那么如何解决Windows mobile下屏幕旋转带来的界面显示问题,就成了亟待解决的问题。

一般来讲,如果不准备为用户提供横屏体验的话,那么禁止屏幕旋转无疑是最好的解决方案,这篇文章里笔者试图就这个问题进行一些探讨。

我们知道,Windows mobile的本质是事件机制和消息驱动,那么屏幕旋转自然也会发送消息给系统内核,这样以来,读者如果想对Windows mobile屏幕旋转做处理的话,自然首要的任务就是捕获这个屏幕旋转的消息。

首先声明消息捕获接口,如下:

1.BEGIN_MESSAGE_MAP(CMyDlg, CDialog)

2. ON_WM_SETTINGCHANGE()

3.END_MESSAGE_MAP()

那么接下来就是需要对这个捕获到的消息进行处理,如下:

ASP/Visual Basic代码

1.void CMyDlg::OnSettingChange(UINT uFlags, LPCTSTR lpszSection)

2.{

3. TRACE1("CMyDlg::OnSettingChange uFlags: %d/n", uFlags);

4.

5. DEVMODE devmode = {0};

6. devmode.dmSize = sizeof(DEVMODE);

7. devmode.dmFields = DM_DISPLAYORIENTATION;

8. ChangeDisplaySettingsEx(NULL, &devmode, NULL, CDS_TEST, NULL);

9. if (DMDO_0 != devmode.dmDisplayOrientation)

10. {

11. devmode.dmSize = sizeof(DEVMODE);

12. devmode.dmFields = DM_DISPLAYORIENTATION;

13. devmode.dmDisplayOrientation = DMDO_0;

14. ChangeDisplaySettingsEx(NULL, &devmode, NULL, 0, NULL);

15. }

16. return;

17.}

笔者在这里是禁止屏幕进行旋转,如果用户旋转成横屏的话,这段代码会强制用户再回到竖屏状态,如果读者想提供用户横屏体验的话,也可以设置一个变量,从而获取到屏幕的状态,对屏幕的横屏和竖屏状态进行分别绘制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值