여러 디스플레이 모니터에 개체 배치

둘 이상의 모니터에 있는 창 또는 메뉴는 뷰어에 시각적 중단을 일으킵니다. 이 문제를 최소화하기 위해 시스템은 하나의 모니터에 메뉴와 새롭고 최대화된 창을 표시합니다. 다음 표에서는 모니터를 선택하는 방법을 보여줍니다.

개체 위치
시간 범위 CreateWindow(Ex)는 창의 가장 큰 부분을 포함하는 창을 모니터에 표시합니다. 최소화되기 전에 창의 가장 큰 부분을 포함하는 모니터에서 최대화합니다.
ALT-TAB 키 조합은 현재 활성 창이 있는 창을 모니터에 표시합니다.
소유 창 소유자와 동일한 모니터에 있습니다.
하위 해당 메뉴 항목의 가장 큰 부분을 포함하는 모니터에 나타납니다.
상황에 맞는 메뉴 마우스 오른쪽 단추 클릭이 발생한 모니터에 나타납니다.
드롭다운 목록(drop-down list) 콤보 상자의 사각형이 포함된 모니터에 나타납니다.
대화 상자 소유하는 창의 모니터에 나타납니다. DS_CENTERMOUSE 스타일로 정의된 경우 마우스를 사용하여 모니터에 표시됩니다.
소유자와 활성 창이 없고 대화 상자가 동일한 애플리케이션에 있는 경우 현재 활성 창의 모니터에 대화 상자가 나타납니다.
대화 상자에 소유자가 없고 활성 창이 대화 상자와 동일한 애플리케이션에 없는 경우 기본 모니터에 대화 상자가 나타납니다.
메시지 상자 소유하는 창의 모니터에 나타납니다.

 

창이 두 개의 모니터에 걸쳐 있고 모니터 중 하나가 위치가 변경되면 시스템은 원래 창의 가장 큰 부분을 포함하는 모니터에 창을 배치합니다.

또한 애플리케이션은 일반적으로 개체를 배치해야 합니다. 예를 들어 다른 창과 동일한 모니터에 창을 만들어야 할 수 있습니다.

여러 모니터 시스템에 개체를 배치하려면

  1. 적절한 모니터를 확인합니다.
  2. 모니터에 대한 좌표를 가져옵니다.
  3. 좌표를 사용하여 개체를 배치합니다.

일반적으로 기본 모니터 또는 이미 개체가 있는 모니터에 개체를 배치합니다. 지정된 지점, 사각형 또는 창에 대한 모니터를 식별하려면 MonitorFromPoint, MonitorFromRectMonitorFromWindow를 사용합니다.

모니터의 좌표를 얻으려면 작업 영역과 전체 모니터 사각형을 모두 제공하는 GetMonitorInfo를 사용합니다. SM_CXSCREEN 및 SM_CYSCREEN 항상 애플리케이션을 표시하는 모니터가 아니라 기본 모니터를 참조합니다. 또한 모니터가 아닌 가상 화면에 창을 가운데에 두므로 SM_xxVIRTUALSCREEN 않도록 합니다.

창의 작업 영역에서 대화 상자를 가운데에 배치하려면 DS_CENTER 스타일을 사용합니다. 대화 상자를 애플리케이션 창에 가운데에 배치하려면 GetWindowRect를 사용합니다. Windows는 자동으로 메뉴 및 대화 상자를 모니터로 제한합니다. 그러나 사용자 지정 메뉴, 사용자 지정 드롭다운 상자, 사용자 지정 도구 팔레트 및 저장된 애플리케이션 위치에 문제가 있을 수 있습니다.

개체를 올바르게 배치하는 방법에 대한 예제는 다중 디스플레이 설정에서 개체 배치를 참조하세요.

SM_CXSCREEN 및 SM_CYSCREEN 사용하여 애플리케이션 데스크톱 도구 모음( appbar라고도 함)의 위치를 확인하면 앱바가 기본 모니터로 제한됩니다. 앱바가 모든 모니터의 가장자리에 있을 수 있도록 하려면 적절한 시스템 메트릭을 사용하여 모니터의 가장자리를 계산합니다. 또한 GET_X_LPARAMGET_Y_LPARAM 매크로를 사용하여 좌표를 추출합니다. 그렇지 않으면 좌표의 부호가 잘못되었을 수 있습니다. 이러한 매크로는 Windowsx.h에 포함되어 있습니다.

해상도가 다른 모니터 간에 이동함에 따라 전체 화면 창의 크기가 변경되어야 합니다. 이렇게 하려면 애플리케이션에서 MonitorFromWindow 또는 MonitorFromPoint 를 사용하여 현재 창을 검사 다음, GetMonitorInfo를 사용하여 모니터 크기를 가져와야 합니다. 또는 DirectX DirectDrawEnumerateEx 함수의 HMONITOR를 사용할 수 있습니다. 그런 다음 SetWindowPos 를 사용하여 창을 배치하고 크기를 조정하여 모니터를 덮습니다.

최대화된 창에는 "Always on top" 속성이 있는 작업 표시줄이 포함되지 않습니다. 그러나 전체 화면 창은 작업 표시줄을 포함합니다(예: Microsoft PowerPoint 슬라이드 쇼 및 게임).

애플리케이션이 종료되면 창 위치를 저장하고 나중에 복원하려면 GetWindowPlacementSetWindowPlacement 함수를 사용합니다. 그러나 검사 모니터가 시스템에서 이동되거나 제거되었을 수 있으므로 사용하기 전에 위치가 여전히 유효하다고 검사. 창의 HMONITOR 가 잘못된 경우 애플리케이션은 기본 모니터에 창을 표시합니다.

시스템은 바로 가기가 포함된 모니터에서 애플리케이션을 시작하려고 합니다. 따라서 애플리케이션을 배치하는 한 가지 방법은 원하는 모니터에 바로 가기를 사용하는 것입니다.

ShellExecute 또는 ShellExecuteEx를 사용하는 경우 시스템이 호출 애플리케이션과 동일한 모니터에서 새 창을 열 수 있도록 hWnd를 입력합니다.

MINMAXINFO 구조체의 값은 여러 모니터가 있는 시스템에 대해 약간 변경됩니다.