由于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;
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 }
動态修改系統分辨率和旋轉螢幕的效果圖如下。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcucDNiRjMlJDM4QmZwgDNzgjMzQTOkRmZ3kTO0EWZ3UzMfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
測試平台原始分辨率是800*480,先後将分辨率改為640*480和480*272,并在480*272的分辨率下将螢幕旋轉90°。