Windows mobile屏幕旋转解决方案

来源:互联网 发布:floyd算法 编辑:程序博客网 时间:2024/06/05 11:04

Windows mobile屏幕旋转解决方案

 

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

 

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

 

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

 

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

 

BEGIN_MESSAGE_MAP(CMyDlg, CDialog)

    ON_WM_SETTINGCHANGE()

END_MESSAGE_MAP()

 

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

 

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

{

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

 

    DEVMODE devmode = {0};

    devmode.dmSize = sizeof(DEVMODE);

    devmode.dmFields = DM_DISPLAYORIENTATION;

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

    if (DMDO_0 != devmode.dmDisplayOrientation)

    {

        devmode.dmSize = sizeof(DEVMODE);

        devmode.dmFields = DM_DISPLAYORIENTATION;

        devmode.dmDisplayOrientation = DMDO_0;

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

    }

    return;

}

 

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

原创粉丝点击