【问题标题】:Close modeless dialog when another window closes当另一个窗口关闭时关闭无模式对话框
【发布时间】:2014-01-04 17:13:20
【问题描述】:

我创建了一个无模式对话框,如下所示,

CPlotDlg * newd = new CPlotDlg ();
newd->Create(IDD_PLOT,this->GetParentOwner());
newd->SetParent(this->GetParentFrame()->GetParent());
newd->ShowWindow(SW_SHOW);

我想在关闭另一个窗口(不是父窗口)时关闭此对话框。我怎样才能做到这一点? 谢谢。

【问题讨论】:

    标签: c++ visual-c++ visual-studio-2008 mfc


    【解决方案1】:

    只是,将CPlotDlg*保存到其他用于关闭CPlotDlg窗口的窗口。

    如果更近的窗口是 SomeWhereDlg,

    class SomeWhereDlg
    {
      public:
      ...
      ...
      CPlotDlg* m_plotDlg;
    };
    
    void SomeWhereDlg::SetPlotDlg(CPlotDlg* plotDlg)
    {
      ASSERT(plotDlg);
      if(plotDlg == nullptr) { return;}
    
      m_plotDlg = plotDlg;
    }
    

    然后,在创建 CPlotDlg 窗口时,保存指针。

    CPlotDlg* newd = new CPlotDlg ();       
    //Save newd(CPlotDlg*) to somewhere
    //i.e) specific window which will close this newd window
    //SomeWhereDlg->SetPlotDlg(newd);
    
    newd->Create(IDD_DIALOG1,this->GetParentOwner());
    newd->SetParent(this);
    newd->ShowWindow(SW_SHOW);
    

    如果发生关闭事件,只需通过 m_plotDlg 调用 Close() 或删除等。

    【讨论】:

    • 问题是我无法创建 SomeWhereDlg 的实例,因为它已经在不同的类中创建了。
    • 我认为您的情况如下,1)无法再次创建SomewhereDlg。 2)SomewhereDlg 必须在相关时间关闭 CPlotDlg 窗口。如上规则,您必须将 SomeWhereDlg 实例指针保存到全局变量或任何可访问的窗口类中。
    【解决方案2】:

    要关闭无模式对话框,请将指针保存为 CodeDreamer 显示的内容,然后调用 m_plotDlg->DestroyWindow()

    【讨论】:

    • 或者,将 WM_CLOSE 发布到窗口。
    猜你喜欢
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多