2010-07-02 6 views
1

나는 C++에서 전체 화면 응용 프로그램 wrtten을 가지고 있으며 사용자가 전체 화면 모드를 벗어나는 응용 프로그램을 열지 않고도 파일을 선택할 수 있도록 대화 상자 창을 열고 싶습니다.전체 화면 응용 프로그램에서 GetOpenFileName 대화 상자를 만들 수 있습니까?

Windows에서 전체 화면 모드로 실행하려면 ChangeDisplaySettings(&settings, CDS_FULLSCREEN)으로 전화하십시오. (기술적으로, 나는 SDL을 사용하고 있지만, 이것은이 사용하는 전화입니다.)

파일 대화 상자를 열려면, 나는 다음과 같은 코드를 사용

실행
HWND hWnd = NULL; 
SDL_SysWMinfo wmInfo; 
SDL_VERSION(&wmInfo.version); 
if(SDL_GetWMInfo(&wmInfo)) { 
    hWnd = wmInfo.window; // Note: This is sucessful, and hWnd != NULL 
} 

OPENFILENAMEW ofn; 
wchar_t fileName[MAX_PATH] = L""; 
ZeroMemory(&ofn, sizeof(ofn)); 

ofn.lStructSize = sizeof(OPENFILENAME); 
ofn.hwndOwner = hWnd; 
ofn.lpstrFile = fileName; 
ofn.nMaxFile = MAX_PATH; 
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST; 

if(GetOpenFileNameW(&ofn)) { 
    DoSomethingWith(fileName); 
} 

, HWND는 NULL이 아니라 때 이 대화 상자가 만들어지면 창 포커스가 전체 화면 응용 프로그램에서 빠져 나오는 대화 상자로 이동합니다. 전체 화면에서 Alt 키를 누른 상태에서 다른 창으로 이동하는 것과 유사합니다. 파일이 선택되고 파일 열기 대화 상자가 닫히면 수동으로 전체 화면 앱으로 전환해야합니다.

기존 Windows 대화 상자를 사용하여 원하는 작업을 수행 할 수 있습니까? 아니면 자신의 인앱 파일 찾아보기 시스템을 작성하거나 창 모드에서만 실행해야합니까?

답변

1

물론 ... 당신은 파일 열기 일반적인 대화 상자 (이 GetOpenFileName에 전달되는 OPENFILENAME 구조의 hwndOwner 매개 변수)의 부모로 전체 화면 윈도우의 HWND를 통과해야합니다.

+0

hwndOwner를 가져오고 설정하는 데 사용하는 코드를 추가했지만 hwndOwner가 NULL이 아니어도 여전히 작동하지 않습니다. 어쩌면 지금은 SDL 질문 일 것입니다. – JDS

+0

흠 내일 내일 (SDL을 알지 못해서 평소 C + WinAPI에서) 나 자신을 시험해보고 알려 드리겠습니다. – Wizard79

+0

정상적인 Win32 앱이 전체 화면에서 작동한다는 것을 알고 있습니다. SDL에 대해서는 잘 모르겠지만 어떻게 다른 일을 할 수 있는지 모르겠습니다. – casablanca

관련 문제