[WinAPI] EnumDisplayMonitors, 다중 모니터 정보 얻기.

원래 Callback 함수에 대해 글을 쓰려했는데, 공부 스타일이 예제를 먼저 보고 이해하는게 좋을 것 같아 Callback 예제 함수를 소개하고자 합니다.
간단한 Callback 개념은 여기를 참고해주세요.

Callback 함수를 아래와 같이 정의 합니다.

// 선언
static BOOL CALLBACK MonitorEnumProc( HMONITOR hmonitor, HDC hdc, LPRECT lprect, LPARAM lparam );

// 정의
BOOL CALLBACK CMFCApplicationDlg::MonitorEnumProc( HMONITOR hmonitor, HDC hdc, LPRECT lprect, LPARAM lparam )
{
	// todo .. : 작업 입력
    
	return TRUE;
}

그리고 아래와 같이 EnumDisplayMonitors함수에 콜백함수를 인자로 전달하여 호출합니다.

::EnumDisplayMonitors( NULL, NULL, MonitorEnumProc, NULL );

제 PC의 모니터는 2대 이므로 EnumDisplayMonitors를 호출하면 MonitorEnumProc 함수가 2회 호출 됩니다.
GetMonitorInfo를 사용하면 콜백된 모니터의 핸들에서 정보를 얻을 수 있습니다.
MonitorEnumProc에 아래와 같이 정의하시면 됩니다.

BOOL CALLBACK CMFCApplicationDlg::MonitorEnumProc( HMONITOR hmonitor, HDC hdc, LPRECT lprect, LPARAM lparam )
{
	MONITORINFO mi;
	mi.cbSize = sizeof( mi );
	GetMonitorInfo( hmonitor, &mi );

	TRACE( _T("left(%d), top(%d), right(%d), bottom(%d)\n"),
    	mi.rcMonitor.left, mi.rcMonitor.top, mi.rcMonitor.right, mi.rcMonitor.bottom );

	return TRUE;
}

만약 MonitorEnumProc가 FALSE을 반환 하면 다음 콜백이 호출되지 않습니다.