[MFC] 듀얼 모니터 환경에서 활용가능한 해상도 제한하기

ljkoy26·2021년 5월 2일
0

MFC

목록 보기
1/1

듀얼 모니터 환경에서 값을 벗어나지 않도록 해상도의 제한 값을 설정하는 로직이다.

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);

	// 다음 필요작업
}
profile
MFC, C++, DBMS, Oracle, DB2

0개의 댓글