应用MFC最关键的就是窗口的创建与销毁,那么在这个两个过程中都发生了一些什么呢?
1,创建
创建模态窗口:
//创建一个模态对话框
CTestDialog td;
td.DoModal();
备注:
可以创建一个局部模态对话框类变量,不用担心它会随着所在函数返回而被销毁。因为DoModal()函数的一个功能是,当前只能运行此模态对话框,且停止主窗口的运行,直到模态对话框退出,才允许主窗口运行。
DoModal()函数也有显示对话框的功能,所以也无需调用其他函数来显示对话框。
创建非摸态窗口:
首先在你所要编写的类的头文件中声明一个指针变量:
private:
CTestDialog *pTD;
然后再在相应的CPP文件中
//采用成员变量创建一个非模态对话
pTD = new CTestDialog(); //给指针分配内存
pTD->Create(IDD_DIALOG1); //创建一个非模态对话框
pTD->ShowWindow(SW_SHOWNORMAL); //显示非模态对话框
最后在类的析构函数中收回pTD所指向的内存:
delete pTD;
备注:
点击非模态对话框中的OK按钮,非模态对话框没有销毁,只是隐藏了。若想点击OK按钮时,非模态对话框也销毁,那么CTestDialog类必须重载其基类CDialog的虚函数OnOK(),在此函数里调用DestroyWindow()来销毁此对话框。
2,创建之后
首先OnCreate():
响应WM_CREATE消息(即OnCreate)的时候窗口还没有建立,你可以给成员变量赋值,也可以修改窗口的基本内容比如风格,但是不能对窗口控件操作,因为窗口还没有建立。
在响应WM_CREATE消息的时候,对话框及子控件还未创建完成,亦是说只是通知系统说要开始创建窗口啦,这个消息响应完之后,对话框和子控件才开始创建。因此在此消息响应函数中无法对控件进行修改和初始化。
这条消息表示一个窗口正在生成。
然后OnInitDialog():
响应WM_INITDIALOG消息(即OnInitDialog)时候窗口已经建立,你可以移动窗口,修改风格等等,也可以给成员变量赋值。
WM_INITDIALOG消息响应函数是在程序运行时,当其对话框和子控件全部创建完毕,将要显示内容的时候发送的消息。因此可以在WM_INITDIALOG消息响应函数中添加对编辑框控件的初始化和修改。
这条消息是在对话框即将显示之前,在Create,CreateIndirect或DoModal调用期间发出的。
最后OnShowWindow():
当CWnd对象要被显示或隐藏时,框架调用这个成员函数。当调用ShowWindow成员函数时,或者重叠窗口被最大化或复原,或者重叠式或弹出式窗口被关闭(变为图标)或打开(被显示)时,窗口被显示或隐藏。当重叠窗口被关闭时,所有的与此窗口相关的所有弹出窗口都被隐藏。
3,关闭
OnClose():
消息响应函数,响应WM_CLOSE消息,点击界面上的“关闭”按钮调用。
OnDestroy():
消息响应函数,响应WM_DESTROY消息,当一个窗口即将被销毁时,被发送。
OnNcDestroy() :
消息响应函数,响应WM_NCDESTROY消息,当一个窗口被销毁以后被发送。