SOFTIST 编程方法筆記 目録

非模态对话框的生成方法(VC++)

本文是非模态对话框的生成方法的笔记。使用非模态对话框可是VC++像VB的Form那样实现多窗口应用。

1.事先准备。创建一个对话框工程(例:Test)。在对话框上贴上一个按钮。生成这个按钮的响应函数。

void CTestDlg::OnBnClickedButton1()
{
   
// TODO: Add your control notification handler code here

}

2.创建非模态对话框的资源与类。用普通的方法创建一个普通对话框的资源与类。比如对话框的资源IDIDD_DIALOG1,类名叫CModalessTest

3.从父对话框CTestDlg显示非模态对话框的CModalessTest。首先用new生成CModalessTest的实体(Object)。 然后,用CDialog的成员関数Create(),以CDlgTest::IDD为参数创建非模态对话框的窗口。最後用ShowWindow()显示非模态对话框。那么改写void CTestDlg::OnBnClickedButton1()如下:

#include "ModalessTest.h"
void
CTestDlg::OnBnClickedButton1()
{
    CModalessTest* pDlg =
new CModalessTest();
    pDlg->Create(CModalessTest::IDD,
this
);
    pDlg->ShowWindow(SW_SHOW);
}

4.非模态对话框实体(Object)的自动清除。非模态对话框关闭以后,要把它的实体清除。在父对话框的某处调用delete CModalessTest;是没有问题的。要是非模态对话框自己能自我删除的话更为方便,重载和改写PostNcDestroy()函数实现此功能。

例:

void CModalessTest::PostNcDestroy() 
{
    CDialog::PostNcDestroy();
    delete this;
}