2014-10-11 86 views
-1

試圖通過物理監視器循環運行,但手柄真的困惑我,我有沿着線運行的僞代碼:多顯示器和手柄

int tempCounter=0 
for(counter = number of monitors;counter > 0;counter--){ 

    RECT tempRECT; 
    HDC tempHDC; 

    Get resolution of DC handle (counter) -> tempRECT; 
    arrayList[tempCounter] = tempRECT; 
    Get virtual work area of DC handle (counter) -> tempRECT; 
    arrayList[tempCounter++] = tempRECT; 
    tempCounter++; 
}  

GetSystemMetrics的(80)爲計數監視器,這是足夠可靠的使用,或者它可能會失敗的任何異常?

我知道那裏沒有太多,但在MSDN上看着我只是圍繞着圈子,而且我不是很擅長編程。

+2

你實際的代碼是假想錯誤,僞碼不顯示的問題。 ['EnumDisplayMonitors'](http://msdn.microsoft.com/en-us/library/dd162610)是你如何枚舉監視器(沒有計數器)。 – 2014-10-11 09:13:53

+0

我知道我需要使用EnumDisplayMonitors,但這不僅讓我困惑。 MSDN對我如何做我想做的事情感到困惑。我不知道如何獲得不同顯示器的處理。 – 2014-10-11 09:20:32

+1

您可以調用'EnumDisplayMonitors'並傳遞您的函數,併爲您調用並接收監視器句柄作爲參數。此外,[此代碼片段顯示使用情況](http://alax.info/trac/public/browser/trunk/Utilities/MonitorInformation/MainDialog.h#L127)。 – 2014-10-11 09:23:34

回答

2

它可以是如此簡單:

#include <Windows.h> 
#include <stdio.h> 

BOOL CALLBACK MonitorEnumProc(
    HMONITOR hMonitor, 
    HDC hdcMonitor, 
    LPRECT lprcMonitor, 
    LPARAM dwData 
    ) 
{ 
    printf("%dx%d\n", lprcMonitor->right, lprcMonitor->bottom); 
} 

int main(int argc, char*argv[]) { 

    EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, 0); 
}