2010-07-02 2 views
1

У меня есть полноэкранное приложение wrtten на C++ и вы хотите открыть диалоговое окно, чтобы пользователь мог выбрать файл, который будет открыт без выхода приложения из полноэкранного режима.Возможно ли создать диалог 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-tabbing в другое окно, находясь в полноэкранном режиме. После того, как файл выбран и диалог открытия файла закрывается, мне нужно вручную переключиться обратно в полноэкранное приложение.

Возможно ли сделать то, что я хочу, используя существующие диалоговые окна Windows, или мне нужно написать свою собственную систему просмотра файлов в приложении или запустить только в оконном режиме?

ответ

1

Конечно ... вы просто должны пройти HWND полного окна экрана в качестве родителя Открыть файл общего диалога (это параметр hwndOwner в OPENFILENAME структуры, которая передается GetOpenFileName).

+0

Я добавил код, который я использую, чтобы получить и установить hwndOwner, но он все еще не работает, даже если hwndOwner не является NULL. Возможно, теперь это вопрос SDL. – JDS

+0

Хмм завтра я попробую себя (в простой C + WinAPI, поскольку я не знаю SDL), и я дам вам знать ... – Wizard79

+0

Я знаю, что это работает в обычном приложении Win32, работающем в полноэкранном режиме. Я понятия не имею о SDL, но я не знаю, что это может быть по-другому. – casablanca

Смежные вопросы