日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在WinCE中实现Screen Rotation(屏幕旋转)

發布時間:2023/11/30 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在WinCE中实现Screen Rotation(屏幕旋转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在WinCE中做Screen Rotation,首先確認顯示設備的驅動是否支持Screen Rotation功能。在顯示設備支持的前提下,可以通過以下兩種方法做Screen Rotation:

1.通過修改注冊表做Rotation

默認情況下,屏幕都是正常顯示的,也就是說翻轉角度為0度。可以通過修改注冊表來做屏幕翻轉,通過修改”Angle”的值來完成,具體設置如下:

[HKEY_LOCAL_MACHINESystemGDIRotation]

"Angle"=dword:5A ;翻轉90度,羅嗦一句,5A就是90的十六進制

可以設置為0度,90度,180度和270度。也就是0,5A,B4和10E,通過設置這些值可以達到屏幕翻轉的目的。你可以在Build image的時候就做這件事情,只要在project.reg文件里面加入上面的設置,然后重新make image,這樣新的image啟動以后就會按照你的設定來顯示。也可以在WinCE啟動以后,編個讀寫注冊表的小程序,來修改這個值,然后重新啟動就可以了(系統要支持HIVE-Based Registry)。

? ? 2.通過ChangeDisplaySettingEx(..)做Rotation

應該說,該函數用來改變顯示設置,具體可參見MSDN。我再來簡單說一下:

函數如下:

LONG ChangeDisplaySettingsEx(
LPCTSTR lpszDeviceName,
LPDEVMODE lpDevMode,
HWND hwnd,
DWORD dwflags,
LPVOID lParam
);

lpszDeviceName:沒有被使用,設置為NULL。

lpDevMode: 指向一個DEVMODE結構指針。

hwnd: 預留。必須設置為NULL。

dwflags:???????? ? 0:目前Screen的圖形模式可以動態改變

???????????????????????? CDS_RESET:即使請求的設置和當前設置一樣,也去改變。

???????????????????????? CDS_TEST:請求的圖形模式被設置,則系統進行測試。

???????????????????????? CDS_VIDEOPARAMETERS:被設置,則lParam傳入一個指向VIDEOPARAMETERS結構的指針。

lParam:??????????? 如果dwflags設置為CDS_VIDEOPARAMETERS,則傳入一個指向VIDEOPARAMETERS結構的指針;否則設置為NULL。

關于DEVMODE結構,還是挺復雜的,一般在CE里面不會都用,這里只介紹幾個我用到的:

dwSize: 描述DEVMODE結構的大小,設置為sizeof(DEVMODE)。

dmFields: 初始化標記位。在作Rotation的時候,會用到的是DM_DISPLAYQUERYORIENTATION和DM_DISPLAYORIENTATION。前一個用來查詢目前的顯示驅動是否支持Rotation,后一用來實現屏幕翻轉。

dmDisplayOrientation:設置翻轉的角度。具體如下:

???????????????? DMDO_0???? The screen is rotated by 0 degrees.
???????????????? DMDO_90?? The screen is rotated by 90 degrees counterclockwise.
???????????????? DMDO_180 The screen is rotated by 180 degrees.
???????????????? DMDO_270 The screen is rotated by 270 degrees counterclockwise.

?

一般在WinCE下,調用該函數作Rotation的時候,我們會首先判斷目前的設備是否支持Rotation,如果設備支持Rotation,就可以進行Rotation操作,下面的程序將屏幕翻轉為270度,程序如下:

BOOL SetRotation() { DEVMODE devmode = {0}; devmode.dmSize = sizeof(DEVMODE); devmode.dmDisplayOrientation = DMDO_270; devmode.dmFields = DM_DISPLAYQUERYORIENTATION; if( DISP_CHANGE_SUCCESSFUL != ChangeDisplaySettingsEx(NULL,&devmode, NULL,CDS_TEST,NULL)) {AfxMessageBox( _T("Not Support!!!") ); return FALSE; }devmode.dmFields = DM_DISPLAYORIENTATION; if( DISP_CHANGE_SUCCESSFUL != ChangeDisplaySettingsEx(NULL,&devmode,NULL,CDS_TEST,NULL)) {AfxMessageBox( _T("Not Support!!!") ); return FALSE; }switch( ChangeDisplaySettingsEx(NULL,&devmode,NULL,CDS_RESET,NULL)) { case DISP_CHANGE_SUCCESSFUL: break; case DISP_CHANGE_BADFLAGS: AfxMessageBox(L"Bad flags!"); break; case DISP_CHANGE_BADMODE: AfxMessageBox(L"bad mode!"); break; case DISP_CHANGE_BADPARAM: AfxMessageBox(L"badparam!"); break; case DISP_CHANGE_NOTUPDATED: AfxMessageBox(L"notupdated!"); break; case DISP_CHANGE_RESTART: AfxMessageBox(L"restart!"); break; default:AfxMessageBox(L"default!"); break; } return TRUE; }

上面兩種方法都可以實現Screen Rotation,第一種通過修改注冊表的方法不能立刻實現Rotation,要等設備reboot以后才會生效。第二種方法不需要重新啟動,函數調用成功后,屏幕就會被翻轉,但是下次啟動以后又會恢復默認值。

轉載于:https://www.cnblogs.com/mugua/archive/2009/03/16/1412871.html

總結

以上是生活随笔為你收集整理的在WinCE中实现Screen Rotation(屏幕旋转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。