是否可以在全屏应用程序中创建GetOpenFileName对话框?

时间:2010-07-02 23:09:42

标签: windows dialog sdl fullscreen

我在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 个答案:

答案 0 :(得分:1)

当然......您只需要将全屏窗口的HWND作为Open File公共对话框的父级传递(它是传递给hwndOwner结构的OPENFILENAME参数GetOpenFileName)。