1、新建一个基于对话框(Dialog Based)工程,名称为Demo
2、在主窗口上添加2个按钮并设置其属性
Button1的ID:IDC_Btn1 caption:按钮一
Button2的ID:IDC_Btn2 caption:按钮二3、再添加2个对话框,分别修改它们的ID和Caption属性
IDD_DIALOG1的ID:IDD_Dlg1 Caption:窗口一
IDD_DIALOG2的ID:IDD_Dlg2 Caption:窗口二4、为新建的2个对话框新建类,类名分别为CDlg1、CDlg2
5、在DemoDlg.h头文件中定义非模态对话框指针,定义为公共类型
public: CDemoDlg(CWnd* pParent = NULL); // standard constructor CDlg1 *pdlg1; //定义非模态对话框指针 CDlg2 *pdlg2; //定义非模态对话框指针
记得在顶部添加头文件
#include "Dlg1.h"
#include "Dlg2.h"6、打开DemoDlg.cpp文件找到 BOOL CDemoDlg::OnInitDialog()对话框初始化并在其后面初始化刚定义的非模态对话框指针,代码如下:
SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here pdlg1=NULL;//指针初始化 pdlg2=NULL;//指针初始化 return TRUE; // return TRUE unless you set the focus to a control
7、双击主界面上的“按钮一”写事件代码
void CDemoDlg::OnBtn1(){ // TODO: Add your control notification handler code here if(pdlg1==NULL) { pdlg1=new CDlg1; //实例化非模态对话框指针 pdlg1->Create(IDD_Dlg1,GetDesktopWindow());//把GetDesktopWindow() 改成this创建的对话框就不在任务栏中显示了 } else { pdlg1->BringWindowToTop(); //对话框置前 } pdlg1->ShowWindow(SW_SHOW); //显示非模态对话框 pdlg1->UpdateWindow(); //更新非模态对话框中的各个控件}void CDemoDlg::OnBtn2(){ // TODO: Add your control notification handler code here if(pdlg2==NULL) { pdlg2=new CDlg2; //实例化非模态对话框指针 pdlg2->Create(IDD_Dlg2,GetDesktopWindow());//把GetDesktopWindow() 改成this创建的对话框就不在任务栏中显示了 } else { pdlg2->BringWindowToTop(); //对话框置前 } pdlg2->ShowWindow(SW_SHOW); //显示非模态对话框 pdlg2->UpdateWindow(); //更新非模态对话框中的各个控件}
以上是“按钮一”、“按钮二”的代码。当关闭主窗口时还要释放非模态对话框所占的资源,现在为主窗口添加WM_ON_CLOSE消息,编写如下的代码释放所占的的资源:
void CDemoDlg::OnClose(){ // TODO: Add your message handler code here and/or call default if(pdlg1 !=NULL) delete pdlg1; //释放非模态对话框所占资源 if(pdlg2 !=NULL) delete pdlg2; //释放非模态对话框所占资源 CDialog::OnClose();}
要记得在DemoDlg.cpp上面添加头文件
#include "Dlg1.h"
#include "Dlg2.h"8、现在运行即可实现非模态对话框效果了:在点击显示对话框时,如果对话框未创建,则创建该对话框,否则将已创建的对话框显示出来。