2014-04-04 3 views
3

다른 해상도에서 실행되는 두 개의 모니터가 있습니다. 왼쪽 모니터는 1920x1200입니다. 오른쪽 모니터 (기본 모니터)는 1920x1080입니다.SetWindowPos 및 해상도가 다른 여러 모니터

SetWindowPos를 사용하여 창을 왼쪽 모니터의 전체 세로 높이로 가져 가고 싶습니다.

여기 내가 무엇 :

x = GetSystemMetrics(SM_XVIRTUALSCREEN); 
hMonitor = monitorFromPoint(x, 0, MONITOR_DEFAULTTONEAREST); 
MONITORINFO moninfo; 
moninfo.cbSize = sizeof(MONITORINFO); 
GetMonitorInfo(hMonitor, moninfo); 

height = moninfo.rcWork.bottom - moninfo.rcWork.top; 

SetWindowPos(hwnd, 0, moninfo.rcWork.left, moninfo.rcWord.top, width, height, SWP_NOZORDER | SWP_NOACTIVATE); 

I는 그 높이가 계산된다 (1200)를 확인했다 (즉 대상 모니터의 수직 해상도 B/C 예상).

그러나 SetWindowPos를 호출 한 후 창 사각형은 화면의 전체 높이를 채우지 않습니다 (실제로는 1080입니다).

Public Sub testSWP() 
    Dim hwnd As Long 
    hwnd = &H1D2F2C 

    SetWindowPos &H1D2F2C, 0, -1900, 0, 150, 1200, SWP_NOZORDER Or SWP_NOACTIVATE 
    Dim r As RECT 
    GetWindowRect hwnd, r 
    ' at this point, r.bottom = 1080 
End Sub 

이 잘 좋은 (GetWindowRect 문서는 좌표가 클라이언트 공간에있을 것이라고, 나는 그는 Win32이의 해상도 사이에 번역되어 있으리라 믿고있어 :

는 난 단지 웃음에 대한 VBA에이 시도 내 기본 및 보조 모니터

대상의 높이와 기본 모니터의 비율에 따라 수직 치수가 팽창 할 준비가되었습니다. 작동 할 것이라고 확신하지만, 많이 보입니다. 농구 팀이 뛰어 내야 만한다. 아마도 나는 클라이언트의 화면 크기를 결정하는 더 좋은 방법을 모르고있을 것이다. 좌표 '?

+1

문제를 해결 한 경우 질문을 삭제하거나 자판을 게시해야합니다. 제목에 "해결 된"을 추가하는 것은 SO가 작동하는 방식이 아닙니다. (자세한 내용은 [help/self-answer]를 참조하십시오.) –

답변

2

문제는 좌표 변형이 아닙니다. 그것은 윈도우가 SetWindowPos가 화면보다 크게되도록 윈도우를 조정하는 것을 허용하지 않는다는 것입니다. 물론, 기본 모니터 크기를 기반으로합니다.

참조 : Can a window be resized past the screen size/offscreen?

0

당신이 (제목 표시 줄 등으로) 일반 창을 원하거나 당신이 (유튜브 전체 화면 비디오 재생이나 게임과 같은) 전체 화면 창을 원하는하지 마십시오.

나는 당신이 후자를 원한다고 생각한다. 즉, 전체 화면을 덮는 전체 화면 창을 만든다. 이를 위해서는 CreateWindow 호출에서 WS_POPUP을 윈도우 스타일로 전달하십시오 (dwStyle param 참조). 이렇게하면 제목 표시 줄없이 창이 만들어지고 전체 화면이 표시됩니다.

또한 왼쪽 모니터가 제대로 작동하지 않는다고 생각합니다. EnumMonitors을 사용하여 모든 모니터를 반복하고 가장 왼쪽의 모니터를 가져온 다음 GetMonitorInfo를 사용하여 일반 응용 프로그램으로 만들려면 모니터의 직사각형을 검색해야합니다.

+0

아니요 - 일반 창 크기를 조정하려고합니다. EnumMonitors를 사용할 필요가 없습니다. 또한 관심있는 모니터의 위치를 ​​알고있는 경우 MonitorFromPoint가이를 수행하는 방법입니다. 어쨌든 문제는 windows가 기본 모니터 크기에 따라 최대 창 크기를 잘못 표시한다는 것입니다. –

+0

오케이, 나는 그 때 당신의 질문을 오해했습니다. 또한, 모니터 선택 - 제 제안은 귀하의 솔루션을 multimon 설치에 대한 일반적인했다. – Abhishek