是否有可能在全屏应用程序中创build一个GetOpenFileName对话框?

我有一个用C ++编写的全屏应用程序,想要打开一个对话窗口,这样用户就可以select一个文件来打开,而不需要使用全屏模式。

在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,但创build此对话框后,窗口焦点会转移到全屏应用程序的对话框中,类似于全屏幕中的alt-tabbing到另一个窗口。 一旦文件被选中,打开文件对话框closures,我不得不手动切换回全屏应用程序。

是否有可能使用现有的Windows对话框来做我想要的,还是必须编写自己的应用内文件浏览系统或仅以窗口模式运行?

当然,你只需要传递全屏窗口的HWND作为打开文件通用对话框(它是传递给GetOpenFileNameOPENFILENAME结构中的hwndOwner参数)的父对象。