由于WinCE的显示驱动是本地驱动,不能像流驱动一样动态加载。所以,一般情况下不能动态修改和调试。前两天曾介绍过一种在应用程序中针对相同分辨率但不同尺寸的LCD的调试方法。这里继续介绍WinCE6.0下动态设置系统分辨率的一种方法。我们可以通过系统提供的ChangeDisplaySettingsEx()函数实现动态修改系统的分辨率。
设定系统分辨率的参考代码如下:
1
DWORD dwWidth, dwHeight;
2
DEVMODE dm;
3
4
dwWidth
=
GetDlgItemInt(IDC_COMBO_WIDTH, NULL, FALSE);
5
dwHeight
=
GetDlgItemInt(IDC_COMBO_HEIGHT, NULL, FALSE);
6
memset((
char
*
)
&
dm,
0
,
sizeof
(DEVMODE));
7
dm.dmSize
=
sizeof
(DEVMODE);
8
dm.dmPelsWidth
=
dwWidth;
9
dm.dmPelsHeight
=
dwHeight;
10
dm.dmFields
=
DM_PELSWIDTH
|
DM_PELSHEIGHT;
11
12
if
(DISP_CHANGE_SUCCESSFUL
==
ChangeDisplaySettingsEx(NULL,
&
dm, NULL,
0
, NULL))
13
{
14
CenterWindow();
15
}
通过这个函数,我们还可以实现屏幕的旋转,参考代码如下:
1
DWORD dwAngle;
2
DEVMODE dm;
3
4
dwAngle
=
SendDlgItemMessage(IDC_COMBO_ANGLE, CB_GETCURSEL, NULL, NULL);
5
memset((
char
*
)
&
dm,
0
,
sizeof
(DEVMODE));
6
dm.dmSize
=
sizeof
(DEVMODE);
7
dm.dmDisplayOrientation
=
DMDO_0
+
(dwAngle
<=
DMDO_180
?
dwAngle :
4
);
8
dm.dmFields
=
DM_DISPLAYORIENTATION;
9
10
if
(DISP_CHANGE_SUCCESSFUL
==
ChangeDisplaySettingsEx(NULL,
&
dm, NULL,
0
, NULL))
11
{
12
CenterWindow();
13
}
动态修改系统分辨率和旋转屏幕的效果图如下。
测试平台原始分辨率是800*480,先后将分辨率改为640*480和480*272,并在480*272的分辨率下将屏幕旋转90°。