VC学习:对话框
2010-11-01 08:07:59 来源:WEB开发网http://tech.cncms.com/develop/vc/59131.html
http://tech.cncms.com/develop/vc/59160.html
http://tech.cncms.com/develop/vc/59028.html
/*【对话框专题知识】*/
//知识点:创建对话框;显示对话框;
//新建Single Document程序
void CMyBoleView::OnDialog() //对话框的响应函数
{
//首先创建一个新的对话框资源,并增加一个相关的类[CTestDlg]用来操作该资源。再增加一个菜单项(view类)用来显示该对话框。【每增加一个新对话框都需增加一个相关类来做相关处理】
//▲注意:要在view类头文件里包含testdlg.h,才能在菜单项的消息响应函数使用该类。
/*■1.<<创建、显示、关闭模态对话框>>*/
CTestDlg dlg; //此处是局部变量,但不要紧,因为程序会暂时停下来等模态对话框关闭后再运行;
dlg.DoModal();//创建并显示模态对话框
/*■2.<<创建、显示、销毁非模态对话框>>*/
//>>错误写法:CTestDlg dlg;
//▲不能定义成局部变量。局部变量两种处理方法:[1]定义成view类的成员变量;[2]定义成指针,在堆栈上分配内存,因为堆栈上的内存和程序的整个生命期是一致的(前提是程序不能主动销毁)
CTestDlg *pDlg=new CTestDlg;
//▲>>指针变量是一个局部变量,生命周期结束后其保存的内存地址就丢失了,程序无法再引用了,解决方法:
//[1]定义为视类的成员变量,再在其析构函数里用delete函数释放内存;
//[2]在CTestDlg类中重载PostNcDestroy虚函数,释放this指针指向的内存。
pDlg->Create(IDD_DIALOG1,this); //第一个参数可以是对话框资源ID或对话框模板名称;第二个参数指定父窗口,为NULL时即为主应用程序窗口
pDlg->ShowWindow(SW_SHOW);
//▲>>非模态与模态的区别:[1]显示 [2]局部变量的使用 [3]按下ok键后,模态的会调用OnOK虚函数,其又会调用EndDialog函数,从而终止模态对话框而非模态的并不销毁对话框,仅使其不可见,故要重写基类的OnOK虚函数(或OnCancel虚函数),在重写函数中调用DestroyWindow函数
pDlg->DestroyWindow();//销毁非模态对话框
delete pDlg;//释放指针
/*■3.1<<动态创建模态对话框>>*/
CTestDlg dlg;//局部变量不要紧,因为程序会暂时停下来等模态对话框关闭后再运行
dlg.DoModal();//创建并显示模态对话框
}
/*■3.<<动态创建模态对话框>>*/
//功能:单击对话框中某个按钮时(在对方框),就在对话框中动态创建一个新按钮
void CTestDlg::OnBtnAdd() //按钮Add的响应函数
{
//>>先创建模态对话框(view类Ondialog中,见上3.1),再在对话框IDD_DIALOG1添加一按钮Add并对其添加消息处理函数(CTestDlg类,也即此函数)
赞助商链接