【问题标题】:Is it possible to create a GetOpenFileName dialog in a fullscreen app?是否可以在全屏应用程序中创建 GetOpenFileName 对话框?
【发布时间】: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


    【解决方案1】:

    当然...您只需将全屏窗口的 HWND 作为“打开文件”公共对话框的父级传递(它是传递给 GetOpenFileNameOPENFILENAME 结构中的 hwndOwner 参数) .

    【讨论】:

    • 我添加了用于获取和设置 hwndOwner 的代码,但即使 hwndOwner 不为 NULL,它仍然无法工作。也许现在这更像是一个 SDL 问题。
    • 嗯,明天我会自己尝试(使用纯 C+WinAPI,因为我不知道 SDL),我会告诉你...
    • 我知道这适用于全屏运行的普通 Win32 应用程序。我不知道 SDL,但我不知道它有什么不同。
    猜你喜欢
    • 2023-04-04
    • 2011-12-17
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多