我有一个托盘图标的应用程序。有一个隐藏的主窗口(CMainFrm),用于处理托盘图标消息。托盘图标有一个上下文菜单:设置,帮助,退出命令。
当用户选择“设置”时,将显示无模式设置对话框(父级:GetDesktopWindow())。 设置对话框有一个浏览按钮,将MyBrowseFolderDialog显示为模态!因此,显示此对话框时出现问题,并且用户尝试使用托盘菜单中的“退出”命令关闭应用程序。
有没有人知道如何使用所有这些对话框优雅地关闭应用程序? 托盘菜单=>设置对话框(无模式)=> BrowseDialog(modal)
答案 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中,以便设置和退出处理程序都可以根据需要访问它。
其他一些可能的解决方案:
设置处理程序在文件夹浏览处于活动状态时禁用“退出”选项
注册自定义消息 - 让Exit处理程序将此消息发送到浏览文件夹(尽管您仍需要某种窗口句柄)
我最喜欢Alex的答案 - 只需将指针存放在CMainFrm
中