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

时间:2010-12-01 10:33:10

标签: c++ windows dialog save

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

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

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

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

res = GetSaveFileNameW( &ofn );

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

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

谢谢,
伊利亚·

3 个答案:

答案 0 :(得分:3)

如果我理解你是正确的,你需要在关闭对话框之前检查一些东西(例如,文件扩展名)并在关闭时显示消息。如果是这样,请查看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 */
        }
    }
}

希望它对你有所帮助。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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