MFC如何在切换视图时关闭无模式对话框
Posted
技术标签:
【中文标题】MFC如何在切换视图时关闭无模式对话框【英文标题】:MFC How to close a modeless dialog when switching views 【发布时间】:2019-03-20 21:07:33 【问题描述】:我有一个包含无模式对话框的视图。
除了与对话框交互发送消息以修改当前活动视图上的对象外,一切正常。当我切换到新视图或另一个视图时,它会导致崩溃,因为该对象不存在于该新视图中。
想问一下切换视图时如何关闭无模式对话框?
应该在视图类还是文档类中处理?
消息路径为Dialog -> 发送用户定义消息 -> 主机 -> 获取当前活动视图 -> 传递消息 -> 查看消息句柄接收消息
谢谢
【问题讨论】:
如果您创建非模态对话框作为 CView 类的成员和子类,那么一切都是自动的。它会随着景色来来去去。您是在框架中创建它还是什么?否则,你确定你的崩溃是因为对话框吗?堆栈是什么样的? @lakeweb 我是新手。如何将对话框创建为视图的成员和子项?我所做的只是在视图类中使用 CMyDialog*(extends CDialog) 并在需要时调用新的 CMyDialog()、Create() 函数。创建对话框时是否需要指定其父视图? 【参考方案1】:而且,在视图框架中执行此操作可能更有意义。所以...
在.h中:
class MyFrm: public CFrameWnd
MyDialog dlg;
;
在.cpp中:
MyFrm::MyFrm( )
:dlg( this )
void MyFrm::OnInitialUpdate()
tagDlg.Create( this );
tagDlg.ShowWindow( SW_NORMAL );
如果您想切换对话框,可以使用菜单项作为开关。您可以:
void MyFrm::OnToggleDlg( )
if( ! dlg.GetSafeHwnd( ) )
dlg.Create( this );
dlg.ShowWindow( SW_NORMAL );
else
dlg.DestroyWindow( );
我希望这是有道理的。
【讨论】:
以上是关于MFC如何在切换视图时关闭无模式对话框的主要内容,如果未能解决你的问题,请参考以下文章