C++ 当另一个窗口关闭时关闭无模式对话框

C++ 当另一个窗口关闭时关闭无模式对话框,c++,visual-c++,visual-studio-2008,mfc,C++,Visual C++,Visual Studio 2008,Mfc,我创建了一个无模式对话框,如下所示 CPlotDlg * newd = new CPlotDlg (); newd->Create(IDD_PLOT,this->GetParentOwner()); newd->SetParent(this->GetParentFrame()->GetParent()); newd->ShowWindow(SW_SHOW); 我想在其他窗口(而不是父窗口)关闭时关闭此对话框。我怎样才能做到这一点? 谢谢。只需将CPlotDl

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

CPlotDlg * newd = new CPlotDlg ();
newd->Create(IDD_PLOT,this->GetParentOwner());
newd->SetParent(this->GetParentFrame()->GetParent());
newd->ShowWindow(SW_SHOW);
我想在其他窗口(而不是父窗口)关闭时关闭此对话框。我怎样才能做到这一点?
谢谢。

只需将CPlotDlg*保存到其他窗口,该窗口将用于关闭CPlotDlg窗口

如果关闭的窗口是某处DLG

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()或delete等即可。

要关闭无模式对话框,请按CodeDreamer显示的方式保存指针,并调用m_plotDlg->DestroyWindow()

问题是我无法创建Somewhere DLG的实例,因为它已在另一个类中创建。我认为您的情况如下:,1)无法再次创建DLG的某些位置。2) 在某些情况下,DLG必须在相关时间关闭CPlotDlg窗口。按照上述规则,您必须保存指向全局变量的SomeWhereDlg实例指针,或者保存在任何可访问的窗口类中。或者,将WM_张贴在窗口附近。