1

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

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

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

4

2 回答 2

1

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

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

在退出消息处理程序中:

如果 ( m_pModaldDlg )
    m_pModaldDlg->EndDialog(0);
//关闭设置对话框
于 2011-02-21T11:15:14.550 回答
0

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

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

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

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

我最喜欢亚历克斯的回答 - 只需将指针存储在 CMainFrm 的某处

于 2011-03-14T19:14:48.600 回答