star6868
asked on
How to create well a Modelles Dialog with MFC?
I have a simplest sample to test Modelless Dialog, but Modelless Dialog allways disappear after created
CMainDlg: is main dialog
CModellesDialog : is other dialog
OnButton1: call a CModellesDialog , but CModellesDialog disappear after created!
- This is my simple sample source
void CMainDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CModellesDialog dlg;
dlg.Create(IDD_DIALOG1,NUL L);
dlg.ShowWindow(1);
AfxMessageBox(".... if remove this AfxmessageBox, dlg modelles will also close");
}
How to keep CModellesDialog concurrent with MainDialog?
CMainDlg: is main dialog
CModellesDialog : is other dialog
OnButton1: call a CModellesDialog , but CModellesDialog disappear after created!
- This is my simple sample source
void CMainDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CModellesDialog dlg;
dlg.Create(IDD_DIALOG1,NUL
dlg.ShowWindow(1);
AfxMessageBox(".... if remove this AfxmessageBox, dlg modelles will also close");
}
How to keep CModellesDialog concurrent with MainDialog?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
You need to construct/create your modeless dialog outside your handler, so that it continues to exist when the handler exits.
The way I usually do it is to have a private membervariable of CMainDialog being a pointer to your CModellesDialog.
class CMainDialog
{
..
..
private:
CModellesDialog *pmd;
..
}
In your constructor, have:
CMainDialog::CMainDialog(.
{
..
pmd = new CModellesDialog(...)
..
}
In your CMainDialog::OnInitDialog(
CMainDialog::OnInitDialog(
{
pmd->Create(...);
pmd->ShowWindow(SW_SHOW);
}
That will give you a modeless dialog that exists for the lifetime of the program.
However, that's probably not what you want. Instead, take out the ShowWindow() line above and put it in as a response to your button-press handler.
You will naturally need two buttons: one to show the dialog and another to hide it.
Doing it this way means that the dialog exists all the time the program does, consuming resources. However, this can be beneficial if you want the dialog to retain state all the time.
You could really have the "pmd" member variable as the Modeless dialog itself, rather than a pointer to it. Then you wouldn't have to do any newing, just creating.
If you don't want a dialog to exist all the time, then you'll have to go through the new/create/delete cycle whenever your button-presses require it.