Можно ли создать диалоговое окно GetOpenFileName в полноэкранном приложении? - PullRequest
1 голос
/ 03 июля 2010

У меня полноэкранное приложение, написанное на C ++, и я хочу открыть диалоговое окно, чтобы пользователь мог выбрать файл, который нужно открыть, не выходя из полноэкранного режима приложения.

В 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 Ответ

1 голос
/ 03 июля 2010

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

...