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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

1.通過修改注冊表做Rotation

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

[HKEY_LOCAL_MACHINESystemGDIRotation]

"Angle"=dword:5A ;翻轉(zhuǎn)90度,羅嗦一句,5A就是90的十六進(jìn)制

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

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

應(yīng)該說,該函數(shù)用來改變顯示設(shè)置,具體可參見MSDN。我再來簡單說一下:

函數(shù)如下:

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

lpszDeviceName:沒有被使用,設(shè)置為NULL。

lpDevMode: 指向一個DEVMODE結(jié)構(gòu)指針。

hwnd: 預(yù)留。必須設(shè)置為NULL。

dwflags:???????? ? 0:目前Screen的圖形模式可以動態(tài)改變

???????????????????????? CDS_RESET:即使請求的設(shè)置和當(dāng)前設(shè)置一樣,也去改變。

???????????????????????? CDS_TEST:請求的圖形模式被設(shè)置,則系統(tǒng)進(jìn)行測試。

???????????????????????? CDS_VIDEOPARAMETERS:被設(shè)置,則lParam傳入一個指向VIDEOPARAMETERS結(jié)構(gòu)的指針。

lParam:??????????? 如果dwflags設(shè)置為CDS_VIDEOPARAMETERS,則傳入一個指向VIDEOPARAMETERS結(jié)構(gòu)的指針;否則設(shè)置為NULL。

關(guān)于DEVMODE結(jié)構(gòu),還是挺復(fù)雜的,一般在CE里面不會都用,這里只介紹幾個我用到的:

dwSize: 描述DEVMODE結(jié)構(gòu)的大小,設(shè)置為sizeof(DEVMODE)。

dmFields: 初始化標(biāo)記位。在作Rotation的時候,會用到的是DM_DISPLAYQUERYORIENTATION和DM_DISPLAYORIENTATION。前一個用來查詢目前的顯示驅(qū)動是否支持Rotation,后一用來實(shí)現(xiàn)屏幕翻轉(zhuǎn)。

dmDisplayOrientation:設(shè)置翻轉(zhuǎn)的角度。具體如下:

???????????????? 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下,調(diào)用該函數(shù)作Rotation的時候,我們會首先判斷目前的設(shè)備是否支持Rotation,如果設(shè)備支持Rotation,就可以進(jìn)行Rotation操作,下面的程序?qū)⑵聊环D(zhuǎn)為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; }

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

轉(zhuǎn)載于:https://www.cnblogs.com/mugua/archive/2009/03/16/1412871.html

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。