듀얼 모니터 환경에서 값을 벗어나지 않도록 해상도의 제한 값을 설정하는 로직이다.
void C듀얼모니터위치값Dlg::OnBnClickedButtonDisplay()
{
// 듀얼 모니터 환경에서 허용된 포지션 값 내에서만 객체를 조정할수 있도록 해상도를 제한한다.
// 연결된 모니터 안에서 가장 낮은 상,좌 좌표값을 가진 부분을 기준으로
// 최종길이를 반영하도록 설정한다.
int nTotalMonitorWidth(GetSystemMetrics(SM_CXVIRTUALSCREEN)); // 모니터의 최종 가로길이(1920*2 = 3840)
int nTotalMonitorHeight(GetSystemMetrics(SM_CYVIRTUALSCREEN)); // 모니터의 최종 세로길이(1080)
int nMinLeft, nMinTop;
int nMonitorCount(GetSystemMetrics(SM_CMONITORS)); // 모니터의 갯수
DISPLAY_DEVICE stDisplayDevice;
DEVMODE stDevMode;
CRect MonitorRect;
for (int i = 0; i < nMonitorCount; ++i)
{
stDisplayDevice.cb = sizeof(DISPLAY_DEVICE); // 초기화
EnumDisplayDevices(NULL, i, &stDisplayDevice, 0);
if (EnumDisplaySettings(stDisplayDevice.DeviceName, ENUM_CURRENT_SETTINGS, &stDevMode))
{
// 주요 모니터의 기준으로 x,y 좌표값이 (0,0) 으로 초기화 된다.
// 인식된 모니터의 해상도가 - 값으로 내려가는 경우는,
// 주 모니터 보다 [좌,상] 측에 위치한다는 증거이다.
nMinLeft = min(MonitorRect.left, stDevMode.dmPosition.x);
nMinTop = min(MonitorRect.top, stDevMode.dmPosition.y);
}
}
TRACE(_T("nTotalMonitorWidth [%d] | nTotalMonitorHeight [%d] \n"), nTotalMonitorWidth, nTotalMonitorHeight);
TRACE(_T("nMinWidth [%d] | nMinHeight [%d] \n"), nMinLeft, nMinTop);
TRACE(_T("가로 허용범위[%d ~ %d]\n"), nMinLeft, nMinLeft + nTotalMonitorWidth);
TRACE(_T("세로 허용범위[%d ~ %d]\n"), nMinTop, nMinTop + nTotalMonitorHeight);
// 다음 필요작업
}