1
我有一个用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不为空,但是当此对话框已创建,它会将窗口焦点转移到对话框,该对话框将突出显示全屏应用程序,类似于在全屏幕中切换到另一个窗口。一旦文件被选中并且打开文件对话框关闭,我必须手动切换回全屏应用程序。
是否可以使用现有的Windows对话框做我想做的事情,还是必须编写自己的应用内文件浏览系统或仅以窗口模式运行?
我添加了我用来获取和设置hwndOwner的代码,但即使在hwndOwner不为NULL时它仍然不起作用。也许现在这更像是一个SDL问题。 – JDS 2010-07-02 23:46:11
明天我会试试自己(在纯C + WinAPI中,因为我不知道SDL),我会让你知道... – Wizard79 2010-07-02 23:49:51
我知道这是在一个普通的Win32应用程序全屏运行。我对SDL一无所知,但我不知道它会做什么不同。 – casablanca 2010-07-03 00:00:26