MFC无模式和模态对话框

时间:2011-02-21 11:06:30

标签: mfc dialog modal-dialog modeless

我有一个托盘图标的应用程序。有一个隐藏的主窗口(CMainFrm),用于处理托盘图标消息。托盘图标有一个上下文菜单:设置,帮助,退出命令。

当用户选择“设置”时,将显示无模式设置对话框(父级:GetDesktopWindow())。 设置对话框有一个浏览按钮,将MyBrowseFolderDialog显示为模态!因此,显示此对话框时出现问题,并且用户尝试使用托盘菜单中的“退出”命令关闭应用程序。

有没有人知道如何使用所有这些对话框优雅地关闭应用程序? 托盘菜单=>设置对话框(无模式)=> BrowseDialog(modal)

2 个答案:

答案 0 :(得分:1)

将CDialog * m_pModaldDlg成员添加到“设置”对话框类,在构造函数中将其初始化为NULL。显示MyBrowseFolderDialog时,将其设置为此对话框指针:

MyBrowseFolderDialog dlg();
m_pModaldDlg = &dlg;
dlg.DoModal();
m_pModaldDlg = NULL;

退出消息处理程序:

if ( m_pModaldDlg )
    m_pModaldDlg->EndDialog(0);
// Close settings dialog

答案 1 :(得分:0)

Alex回答仍然很好 - 您必须将m_pModalDlg存储在CMainFrm中,以便设置和退出处理程序都可以根据需要访问它。

其他一些可能的解决方案:

  1. 设置处理程序在文件夹浏览处于活动状态时禁用“退出”选项

  2. 注册自定义消息 - 让Exit处理程序将此消息发送到浏览文件夹(尽管您仍需要某种窗口句柄)

  3. 我最喜欢Alex的答案 - 只需将指针存放在CMainFrm