У меня есть полноэкранное приложение, написанное на С++, и я хотел бы открыть диалоговое окно, чтобы пользователь мог выбрать файл для открытия без выхода приложения из полноэкранного режима.
В 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-Tab в другое окно в полноэкранном режиме. Как только файл выбран и диалоговое окно «Открыть файл» закрывается, мне приходится вручную переключаться обратно в полноэкранное приложение.
Можно ли делать то, что я хочу, используя существующие диалоги Windows, или мне нужно написать свою собственную систему просмотра файлов в приложении или работать только в оконном режиме?