2013/04/15

멀티 모니터 해상도 확인하기

멀티모니터를 사용하는 경우 각각의 모니터의 해상도와 출력 영역을 확인 하는 방법이다.

EnumDisplayMonitors 함수를 이용하는 것으로 CallBack 함수인 MyEnumDispMonitorProc 에서 각각 모니터의 정보를 처리한다.

void Class::Func()
{
:
vector< CRect > vrcMon;
EnumDisplayMonitors( NULL, NULL, MyEnumDispMonitorProc, (LPARAM)&vrcMon );

for ( int i = 0; i < (int)vrcMon.size(); ++i )
{
TRACE( "Monitor #%d, %dx%d - %dx%d (%dx%d) \n"
, i, vrcMon[i].left, vrcMon[i].top
, vrcMon[i].right, vrcMon[i].bottom
, vrcMon[i].Width(), vrcMon[i].Height() );
}
:
}

BOOL CALLBACK Class::MyEnumDispMonitorProc(HMONITOR hMon
, HDC hDC, LPRECT pRect, LPARAM lParam)
{
vector< CRect >* pVRcMon = (vector< CRect >*)lParam;

MONITORINFOEX mi;
mi.cbSize = sizeof(MONITORINFOEX);
GetMonitorInfo( hMon, &mi );

TRACE(
"Monitor Info (%s)(%s) \n"
" Monitor %dx%d - %dx%d (%dx%d) \n"
" Work %dx%d - %dx%d (%dx%d) \n"
, CStringA(mi.szDevice)
, (mi.dwFlags == MONITORINFOF_PRIMARY)? "Primary": ""
, mi.rcMonitor.left, mi.rcMonitor.top
, mi.rcMonitor.right, mi.rcMonitor.bottom
, abs(mi.rcMonitor.right - mi.rcMonitor.left)
, abs(mi.rcMonitor.bottom - mi.rcMonitor.top)
, mi.rcWork.left, mi.rcWork.top
, mi.rcWork.right, mi.rcWork.bottom
, abs(mi.rcWork.right - mi.rcWork.left)
, abs(mi.rcWork.bottom - mi.rcWork.top)
);

CRect rcMon = CRect( pRect );
pVRcMon->push_back( rcMon );

return TRUE;
}

Output:
Monitor Info (\.\DISPLAY1)(Primary)
Monitor 0x0 - 2560x1440 (2560x1440)
Work 0x0 - 2560x1400 (2560x1400)
Monitor Info (\.\DISPLAY2)()
Monitor 2560x416 - 3840x1440 (1280x1024)
Work 2560x416 - 3840x1440 (1280x1024)
Monitor #0, 0x0 - 2560x1440 (2560x1440)
Monitor #1, 2560x416 - 3840x1440 (1280x1024)




EnumDisplayMonitors function on MSD

Original Post :
http://neodreamer-dev.tistory.com/699

No comments :

Post a Comment