1.7 处理用户界面的旋转
Windows Embedded Compact 7支持以90°为增量旋转其用户界面,使Windows Embedded Compact 7设备横放使用或者坚放使用。例如,对于一般的Web Pad、Internet Appliance设备,屏幕多为横向显示,而对于掌上电脑等手持式移动设备,屏幕多为纵向显示。
目前基于Windows Embedded Compact 7设备的屏幕旋转仅支持单屏幕的旋转显示,不支持多屏幕的旋转显示,而与屏幕旋转对应的应用程序主要有两个:Shell应用程序,任务条应用程序。当出现屏幕旋转时,鼠杯和光标会自动调整以适应新的屏幕显示方向。
只有当基于Windows Embedded Compact 7设备的显示驱动支持屏幕旋转时才能真正实现屏幕的旋转显示,如果开发者使用白己的显示驱动而非Platform Builder提供的显示驱动,那么开发者必须保证自己的显示驱动支持屏幕旋转。
在Windows Embedded Compact 7中微软提供的RFlat和Geode MediaGx例显示驱动支持屏幕的旋转,RFlat驱动位于﹪_WINCEROOT%\ Public\Common\0AK\Drivers\Display\RFlat文件夹中,Oeode MediaGx驱动位于%_WINCEROOT%\Public\Common\OAK\CSP\X86\Geode\GXvideo文件夹中。支持旋转的显示驱动应该继承相应的旋转类,并实现一些给定的方法;
同时,支持旋转显示的驱动应该与GPERotate.iib和EmulRotate.lib进行链接。RFlar驱动的
RGPEFIat类继承于GDI的GPERotate类,同时,RFlat驱动的GetRutate ModeFromnReg函数从注册表[HKEY_LOCAL_MACHINE\SYSTEM\GDI\ROTATION]返回Angle键的dword键值并以此来决定当前的屏幕旋转角度。
在显示驱动程序支持屏幕旋转的情况下,还需要创建一个使屏幕产生旋转的应用程序并设置相应的注册表。
1.7.1 创建一个操作系统设计
创建一个支持屏幕旋转的操作系统设计,在New platform向导中进行如下选择:
·命名操作系统设计为Screen Rotation:
·从可用的BSP列表中选择Virtual PC: X86:
·从可用的设计模板列表中选择Handheld。
1.7.2 修改注册表设置
在默认情况下,当操作系统映像下载到目标平台之后,屏幕的旋转角度为0°,即不产生旋转,开发者可以通过修改相应的注册表来更改这个默认设置。随后,在目标平台上运行的任何应用程序可以旋转屏幕,覆盖这个注册表设置。表9-3展示了可以在注册表中设置的Angle子键的值。
表3-3 屏幕旋转角度Angle注册表子键
Angle的值 |
描 述 |
Ox0 |
不旋转 |
Ox5A |
顺时针旋转90° |
OxB4 |
顺时针旋转180° |
Ox10E |
顺时针旋转270° |
下面的过程设置屏幕旋转注册表键:
(l)在Solution窗口,选择ParameterFile选项卡如图1.1:
图1.1选择ParameterFile选项卡
(2)展开目录树,选择Project Specific Files结点;
(3)双击OSdesign.reg在编辑窗口中打开它;
(4)为了设置当前操作系统设计屏幕旋转的默认角度,将下列文本添加到Project.reg文件的末尾,下面的例代码将默认的屏幕角度设置为Ox5A,即90。:
: Settings to rotate the scrcen by 90 degrees clockwise upon download
[HKEY_LOCAL_MACHINE\System\GDI\Rotation]
“Angle”=dword:5A
(5)保存并关闭Project.reg文件,如图1.2:
图1.2保存并关闭Project.reg文件
1.7.3 创建屏幕旋转应用程序
这里我们将在当前的操作系统设计中创建一个使用户能操作屏幕旋转的应用程序,使用户能根据需要以90°为增量顺时针旋转屏幕。
下面过程创建一个屏幕旋转应用程序工程:
(1)打开ScreenRotation操作系统设计。
(2)从“File”菜单上选择“New Project or File”,在“Projects”选项卡上选择“MFC Smart DeviceApplication”。
(3)在“Project name”框中输入屏幕旋转应用程序工程名“Rotate”,默认情况下,Platform Builder将这个工程存储在当前操作系统设计的文件夹下.
(4)选择“Workspace Project”单选按钮,单击“OK”按钮,系统显示“New ProjectWizard”对话框。
(5)选择yincheng_OS SDK.
(6)在当前工程的创建结束后,在“FileView”选项卡的Projects目录树下会显示新创建的Rotate工程。
(7)在“Workspace”窗口中选择“ClassView”选项卡,找到WndProc回调函数,双击WndProc在编辑窗口中打开它。
(8)在WndProc函数的Switch语句中添加以下代码:
case WM_CREATE:
HWND hwndRotateButton;
hwndRotateButton= CreateWindow(TEXT(”button”).TEXT(”Rotate Me”),
WS_CHILDIWS_VISIBLE IBS_PUSHBUTTON, 50. 50.100.75. hWnd.
(HMENU)J,((LPCREATESTRUCT)iParam)->hlnstance,NULL);
break;
这段代码通过在WM_CREATE消息中添加一个“Rotate Me”按钮来为用户提供一个界面,允许用户通过单击这个按钮来旋转屏幕。WM_CREATE消息是在应用程序主窗口创建时自动被调用的。
(9)为了处理