2009-03-26 2 views
0

Windows에서 전체 화면으로 이동할 때 D3D 또는 OpenGL을 사용하는 응용 프로그램의 이상한 동작을 눈치 채셨습니까? 응용 프로그램이 전체 화면으로 이동 한 다음 다시 창으로 전환하거나 종료 할 때만 적용됩니다. 그들은 다른 응용 프로그램 (단일 모니터 컴퓨터에있을 때)의 창 위치를 뒤섞거나 여러 대의 모니터 컴퓨터에있을 때 다른 응용 프로그램 창을 다른 화면으로 이동합니다.해상도를 변경할 때 다른 응용 프로그램 창 크기와 위치를 유지하는 방법은 무엇입니까? (예 : 데스크톱이 아닌 해상도에서 전체 화면 게임으로)

이 두 가지 예외를 보여주지 않는 응용 프로그램이 없다면 당연한 것으로 생각합니다. 그래서, 내 질문은 정확하게 두 사람의 문제를 완화하기 위해 응용 프로그램을 작성할 때 돌볼 필요가 무엇입니까? 또한이 문제가 Windows 이외의 다른 플랫폼에서도 발생하는지 확신 할 수 없습니까?

이것에 관한 나의 주된 설정은 OpenGL/C++이지만, 플랫폼 API와 같은 것으로 생각되기 때문에 설치에 상관 없다.


편집는 : OK, 여기 내 관찰에 대한 좀 더 명확한 설명이다. 데스크톱과 동일한 해상도에서도 문제가 지속됩니다. 따라서 해상도 전환과 관련이없는 것 같습니다. 응용 프로그램/게임이 데스크톱과 동일한 해상도가 아니어도 전환 한 후에도 바탕 화면의 창은 이전처럼 복원되었습니다. 전체 화면 응용 프로그램이 실행되었습니다.


EDIT2 :이 응용 프로그램 윈도우의 위치와 (다중 모니터 설정의 경우) 크기를 기억하지 않는 것 해상도 전환 문제, 윈도우 (적어도 XP) 인 것 같습니다. 질문에 대한 답변에서 제공 한 솔루션 만있는 것처럼 보입니다. OS가 제공해야 할 것으로 보이지만 적어도 API 호출 또는 2 개 이상은 제공해야합니다. 나는 이것이 유일한 해결책이라는 것을 여전히 확신하지 못하고있다. 우아하고 쉬운 복원의 쉬운 방법이 있어야한다.

+0

해상도가 변경 되었기 때문에? –

답변

1

내가 겪고있는 상황에 대해 100 % 확실하다고 말할 수는 없습니다. 그러나, 대부분의 D3D/OpenGL 게임은 성능상의 이유로 시작/종료 할 때 컴퓨터의 해상도를 변경하기 때문에 그것이 내 생각입니다.

Windows를 뒤섞 지 않는 것으로 보이는 것들은 현재 설정으로 실행될 수 있기 때문에 해상도가 변경되지 않을 가능성이 높습니다.

+0

오케이, 질문에 대한 설명이 추가되었습니다. 해상도와 관련이 없지만 복원 전후의 데스크톱/창 크기 및 위치를 "기억"하는 것 이상입니다. – Keyframe

0

흠, 나는 이것에 대해 좀 더 연구를 해봤습니다. 해상도를 변경 한 후 실행중인 모든 창 크기와 위치를 복원하는 데있어 기본 폴백이없는 것처럼 보입니다. 따라서 응용 프로그램 내에서 수행해야합니다 (적어도 XP에서).

그래서, 정상적으로 다시 다른 해상도 (예를 들어 전체 화면 게임)에서 반환하기 위해, 나는 EnumWindows 적절한 콜백 실행중인 모든 응용 프로그램 HWND 년대를 얻을에 GetWindowRect를 통해 창 RECT 구조의 각을 저장해야 목록.

바탕 화면 해상도로 다시 전환 할 때 EnumWindows가 다시 표시되지만 전체 화면으로 전환하기 전에 저장 한 RECT 목록을 사용하여 SetWindowPos를 사용하여 실행중인 응용 프로그램 창 위치 및 크기를 각각 설정하는 다른 콜백이 있습니다.

시청처럼 당신은 심지어에만 API 경우 OS는, 그런 기능을 제공하지 않는 이상한 것 같다 만 EnumWindows 등을 통해 윈도우 HWND를 얻을, 당연히, 잡았다의의가있다.다른 운영 체제가 어떻게 처리하는지 궁금합니다.

2

ChangedDisplaySettingsEx(..., CDS_FULLSCREEN, NULL)을 사용해야합니까? 그러면 시스템에 해상도 스왑이 일시적이라는 것을 알릴 것입니다.

+0

CDS_FULLSCREEN을 사용하면이를 처리하는 올바른 방법입니다. 다른 윈도우의 위치와 크기는 변경되지 않으며 프로세스가 종료 될 때 시스템이 자동으로 원래 디스플레이 모드를 복원합니다. – efotinis

관련 문제