无模式对话框在其父窗口中的打开方法,例子如下:
CSystemSetDlg *pSystemDlg = new CSystemSetDlg(this); //CSystemSetDlg为一个 无模式对话框类
pSystemDlg->Create(IDD_SETALARM_DIALOG);
pSystemDlg->ShowWindow(SW_SHOW);
pSystemDlg->Create(IDD_SETALARM_DIALOG);
pSystemDlg->ShowWindow(SW_SHOW);
在上面的代码中,如果this是程序子窗口而非主窗口,那么程序子窗和无模式对话框将是被激活的显示在最前面。如果要求无模式对话框 总是显示在最前面,pSystemDlg->Create(IDD_SETALARM_DIALOG)必须改 为:pSystemDlg->Create(IDD_SETALARM_DIALOG,this),即指定程序子窗口为无模式对话框的父类。
关闭无模式对话框出错的问题,由于无模式对话框是采用pDlg->ShowWindow(SW_SHOW)方式打开,所以在无模式窗口对话框时,父 窗口并不知道已关闭,也不会去释放其资源,所以释放资源必须由无模式窗口对话框自己完成。在VC++中,释放资源可以重载OnDestroy(),在 CDialog::OnDestroy()函数之后调用 delete this 方法;但在EVC中,这种操作会出错,必须重载PostNcDestroy(),在CDialog::PostNcDestroy()之后调 用 delete this 方法释放资源。在程序中还需要重载OnOk,OnCancel,OnColse函数,在这些函数最后调用DestroyWindow(),此函数会引起 PostNcDestroy函数的执行。