在 SaveAs 对话框前面显示弹出消息

Posted

技术标签:

【中文标题】在 SaveAs 对话框前面显示弹出消息【英文标题】:show pop-up message in front of SaveAs dialog 【发布时间】:2010-12-01 10:33:10 【问题描述】:

在 Windows 应用程序中,是否可以在 SaveAs 对话框打开后?我设法得到的是对话框关闭后弹出显示。

我需要编辑一个用 C++ 编写的旧应用程序(我不是作者),但无法管理此任务。这是代码的一部分:

/* ---- 调用以显示保存文件对话框 ---- */

ofn.hwndOwner = hwnd; 
ofn.lpstrFile = lpstrFileName; 
ofn.lpstrTitle = lpstrTitleName;

res = GetSaveFileNameW( &ofn );

/* ---- fix file extension ---- */

MessageBox(NULL, "Test", "Testing", MB_OK);

谢谢, 伊利亚

【问题讨论】:

【参考方案1】:

如果我理解你的正确,你想在关闭对话框之前检查一些东西(例如,文件扩展名)并在不关闭的情况下显示消息。如果是这样,请查看OPENFILENAME Structure 中的 OFN_ENABLEHOOK 标志。在这种情况下,您的代码将类似于

ofn.hwndOwner = hwnd; 
ofn.lpstrFile = lpstrFileName; 
ofn.lpstrTitle = lpstrTitleName;

/* enables the hook function */
ofn.Flags |= OFN_ENABLEHOOK;
ofn.ofn.lpfnHook = (LPOFNHOOKPROC) MyHookProc;

/* some code here */

res = GetSaveFileNameW( &ofn );

MyHookProc 的代码如下所示:

static UINT CALLBACK MyHookProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)

    if (uMsg == WM_NOTIFY) 
        OFNOTIFYW *notify = (OFNOTIFYW *) lParam;

        if (notify->hdr.code == CDN_FILEOK) 
            /* your code here */
        
    

希望对你有所帮助。

【讨论】:

不,我只是想在打开另存为对话框后显示一些信息消息,例如:“此文件将占用大量内存”:) 谢谢! 在这种情况下,只需在 MyHookProc 中处理 WM_INITDIALOG 即可。 嗯,我试过了,但它只打开了类似于 Win98 的保存对话框 :) 在 vista 及以后需要使用通用文件项接口 IFileDialog 和 associates 来实现。 您是否在 OPENFILENAME 中设置了 OFN_EXPLORER 标志?如果没有,您需要设置它以获得新的对话框样式。【参考方案2】:

你可以,但它会是一个相当的黑客。您必须创建 FileDialog 并以非模态而不是模态的方式打开它并隐藏。所以窗口在那里,但你看不到它。当您单击“弹出窗口”时,您可以取消隐藏窗口对话框。

【讨论】:

【参考方案3】:

听起来您想扩展保存文件对话框的 GUI。您可以使用自己的对话框资源模板扩展 GUI,并指定 OFN_ENABLETEMPLATE。这是显示文档预览/元数据的应用程序的数量。

【讨论】:

以上是关于在 SaveAs 对话框前面显示弹出消息的主要内容,如果未能解决你的问题,请参考以下文章

win7弹出的消息被其他页面遮挡,怎样让弹出的对话框显示在最上面一层?

弹出消息对话框类

在javascript中的 弹出对话框或确认框或消息框中添加表格去显示信息?

(27)Blender源码分析之顶层菜单的关于对话框

(27)Blender源码分析之顶层菜单的关于对话框

MFC对话框中如何响应弹出式菜单事件 点击按钮 弹出菜单 菜单消息事件响应不了