Madz
Madz

Reputation: 1279

Close modeless dialog when another window closes

I have a modeless dialog which I'm creating as below,

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

I want to close this dialog when a different window closes (not the parent). How can I achieve this? Thanks.

Upvotes: 0

Views: 646

Answers (2)

ScottMcP-MVP
ScottMcP-MVP

Reputation: 10425

To close the modeless dialog save the pointer as CodeDreamer shows, and call m_plotDlg->DestroyWindow()

Upvotes: 0

hyun
hyun

Reputation: 2143

Just, save CPlotDlg* to other window which will be used for closing CPlotDlg window.

If the closer window is SomeWhereDlg,

class SomeWhereDlg
{
  public:
  ...
  ...
  CPlotDlg* m_plotDlg;
};

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

  m_plotDlg = plotDlg;
}

And then, when create CPlotDlg window, save the pointer.

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);

if a closing event occur, just call Close() or delete, etc via m_plotDlg.

Upvotes: 1

Related Questions