【发布时间】:2010-07-02 23:09:42
【问题描述】:
我有一个用 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-tab 键切换到另一个窗口。选择文件并关闭“打开文件”对话框后,我必须手动切换回全屏应用程序。
是否可以使用现有的 Windows 对话框来做我想做的事,还是我必须编写自己的应用内文件浏览系统或仅在窗口模式下运行?
【问题讨论】:
标签: windows dialog sdl fullscreen