У меня есть полноэкранное приложение 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, или мне нужно написать свою собственную систему просмотра файлов в приложении или запустить только в оконном режиме?
Я добавил код, который я использую, чтобы получить и установить hwndOwner, но он все еще не работает, даже если hwndOwner не является NULL. Возможно, теперь это вопрос SDL. – JDS
Хмм завтра я попробую себя (в простой C + WinAPI, поскольку я не знаю SDL), и я дам вам знать ... – Wizard79
Я знаю, что это работает в обычном приложении Win32, работающем в полноэкранном режиме. Я понятия не имею о SDL, но я не знаю, что это может быть по-другому. – casablanca