一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

VC多屏幕顯示

 piaoyedu 2013-11-07

       由于工程需要在多個顯示器上顯示不同類容,故查找了一些資料來滿足這個功能。在VC中分為三步來操作:檢測顯示器個數(shù);讀取屏幕分辨率和其他參數(shù);設(shè)置程序的顯示坐標(biāo)。

第一步:檢測屏幕個數(shù)

       網(wǎng)上查找到的通用方法有兩個:EnumDisplayDevicess和GetSystemMetrics,下面分別介紹一下:

       A。EnumDisplayDevices(百度百科連接:http://baike.baidu.com/view/1080527.htm?fr=ala0_1,MSDN連接:http://msdn.microsoft.com/en-us/library/windows/desktop/dd162609(v=vs.85).aspx

函數(shù)功能:該函數(shù)可得到系統(tǒng)中顯示設(shè)備的信息。   

函數(shù)原型:BOOL EnumDisplayDevices (PVOID Unused, DWORD iDevNum, PDISPLAY_DEVICE lpDisplayDevice, 

DWORD dwFlags);

其中第一個參數(shù)和最后一個參數(shù)現(xiàn)在都還沒用到,主要是第二個參數(shù)和第三個,這里簡要介紹一下

iDevNum:指定感興趣的顯示設(shè)備的索引值,操作系統(tǒng)通過索引值確定每一個顯示設(shè)備。索引值是連續(xù)的整數(shù)。從0開始,例如:如果一個系統(tǒng)有三個顯示設(shè)備,那么它們的索引值為0、1、2。

 lpdisplayDevice:DISPLAY_DEVICE結(jié)構(gòu)的指針,該結(jié)構(gòu)檢索由iDevNum指定的顯示設(shè)備的信息,在調(diào)用EnumDisplayDevices之前,必須以字節(jié)為單位把DISPLAY_DEVICE結(jié)構(gòu)中cb元素初始化為DISPLAY_DEVICE結(jié)構(gòu)的大小。

示例代碼:

INT  iNumber=0;
 BOOL bFlag=TRUE;

 

DISPLAY_DEVICE dd;
 ZeroMemory(&dd, sizeof(dd));
 dd.cb = sizeof(dd);

 

 DEVMODE devMode;
 ZeroMemory(&devMode,sizeof(devMode));
 devMode.dmSize=sizeof(devMode);

 

 do
 {
   bFlag = EnumDisplayDevices(NULL, iNumber, &dd, 0);
  bFlag=bFlag&&EnumDisplaySettings(dd.DeviceName,ENUM_CURRENT_SETTINGS,&devMode);
   if (bFlag)
    iNumber += 1;
 } while (bFlag);

   其中iNumber中就為系統(tǒng)所帶顯示器的數(shù)量,網(wǎng)上很多地方都沒有紅色這一行,這樣檢測的結(jié)果并不準(zhǔn)確,我用的筆記本不管是不是有外接顯示器,檢測出的數(shù)字始終為5,查看了這篇日志(http://hi.baidu.com/lin65505578/item/ffa9c32598b14fc3a5275add)后添加了紅色語句后,運行結(jié)果就正常了。猜想EnumDisplayDevices只是檢測系統(tǒng)中存在的顯示設(shè)備,并不一定是當(dāng)前一定在用的設(shè)備。添加設(shè)置語句后,就可以檢測到正在使用的設(shè)備了。
B.int WINAPI GetSystemMetrics(  __in  int nIndex)
(MSDN連接:http://msdn.microsoft.com/en-us/library/windows/desktop/ms724385(v=vs.85).aspx)
用于得到被定義的系統(tǒng)數(shù)據(jù)或者系統(tǒng)配置信息,百度百科上的資料較老,不全面。
只要設(shè)置nIndex為SM_CMONITORS即可,MSDN的解釋為:The number of display monitors on a desktop. 
示例代碼:

INT iNumber=GetSystemMetrics(SM_CMONITORS);
 CString csNum;
 csNum.Format(_T("%d"),iNumber);
 MessageBox(csNum,_T("顯示器數(shù)量"),MB_OK);

相比A中的設(shè)置,這個簡單多了,推薦使用此函數(shù)。

第二步,讀取顯示器參數(shù)及其他參數(shù)

該過程使用前面的兩個API函數(shù):EnumDisplayDevices和EnumDisplaySettings。

//初始化

BOOL bFlag;

DISPLAY_DEVICE dd;
 ZeroMemory(&dd, sizeof(dd));
 dd.cb = sizeof(dd);

 

 DEVMODE devMode;
 ZeroMemory(&devMode,sizeof(devMode));
 devMode.dmSize=sizeof(devMode);

bFlag=EnumDisplayDevices(BULL,iNumber,&dd,0);

if(bFlag)

return FLASE;

bFlag=EnumDisplayDevices(dd.DeviceName,ENUM_CURRENT_SETTINGS,&devMode);

iNumber為要查詢的顯示器編號,從0開始,主屏為0,然后1,2,3....一直下去。查詢?yōu)镋numDisplaySettings(),查詢的數(shù)據(jù)存儲在devMode中,常用的為dmPosition(為當(dāng)前顯示器的坐標(biāo)位置),dmPelsWidth,dmPelsHeight(為當(dāng)前顯示器的分辨率),其余根據(jù)自己需要參見MSDN(http://msdn.microsoft.com/en-us/library/windows/desktop/dd183565(v=vs.85).aspx).
第三步:設(shè)置當(dāng)前程序的顯示位置
在前兩步的基礎(chǔ)上,根據(jù)自己的需要來設(shè)置當(dāng)前程序的顯示坐標(biāo)(ps:如果對系統(tǒng)虛擬坐標(biāo)不了解的可以去查看一下相關(guān)資料)
示例代碼:

CRect reTemp;
 reTemp.BottomRight()=CPoint(devMode.dmPelsWidth+devMode.dmPosition.x,devMode.dmPelsHeight);
 reTemp.TopLeft()=CPoint(devMode.dmPosition.x,devMode.dmPosition.y);
 MoveWindow(&reTemp);


這段代碼添加在MFC程序中的OnInitDialog()中,這樣程序一開始運行就可以在你想要顯示的屏幕中運行.

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    在线观看日韩欧美综合黄片| 日本加勒比系列在线播放| 午夜精品福利视频观看| 黑鬼糟蹋少妇资源在线观看 | 亚洲日本久久国产精品久久| 午夜激情视频一区二区| 欧美一级特黄大片做受大屁股| 99久久国产精品免费| 日韩一级一片内射视频4k| 风韵人妻丰满熟妇老熟女av| 欧美字幕一区二区三区| 午夜精品成年人免费视频| 自拍偷女厕所拍偷区亚洲综合| 欧美亚洲国产日韩一区二区| 国产午夜福利在线免费观看| 中文字幕高清免费日韩视频| 天堂网中文字幕在线视频| 欧美精品在线播放一区二区| 国产在线观看不卡一区二区| 国产又粗又爽又猛又黄的| 91午夜少妇极品福利| 成人午夜激情免费在线| 五月天丁香亚洲综合网| 内射精子视频欧美一区二区| 日韩精品一区二区三区av在线| 日韩一区二区三区有码| 国产精品伦一区二区三区四季| 国产人妻精品区一区二区三区| 视频一区二区 国产精品| 国产一区二区三区草莓av| 国产一区一一一区麻豆| 国产欧美高清精品一区| 美国欧洲日本韩国二本道| 两性色午夜天堂免费视频| 日韩精品一区二区毛片| 亚洲第一区二区三区女厕偷拍| 99久久国产综合精品二区| 亚洲国产精品久久琪琪| 欧美日韩在线视频一区| 五月婷婷缴情七月丁香| 国产一区二区三区色噜噜|