由于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 }
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 }
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°。