对话框分两类:模态(Modal)对话框和非模态(Modeless)对话框
1、模态对话框是实现时候无法执行其他操作,创建模态对话框的方法:
先将对话框关联类,如:CTestDlg 。在点击的cpp文件中加入头文件#include “testdlg.h”,在点击OnClicked函数中(/*假设IDD_TESTDLG为已经定义的对话框资源的ID号*/):
void OnClicked
{
CTestDlg dlg;
dlg.Create(IDD_TESTDLG,this);
dlg.ShowWindow(SW_SHOW);
}
2、非模态对话框是实现时候可以执行其他操作,创建非模态对话框的方法:
先将对话框关联类,如:CTestDlg 。在点击的cpp文件中加入头文件#include “testdlg.h”,不能用以上方法,因为非模态对话框dlg是个局部对象,OnClicked函数结束dlg也销毁(模态是暂停在那里的)。2解决方法(1.将对话框定义为成员变量;2.定义指针)。现用指针,在堆上分配内存(因为在堆上分配内存和程序的整个生命周期是一致的),改为:在点击OnClicked函数中:
void OnClicked
{
CTestDlg *pDlg = new CTestDlg;
pDlg->Create(IDD_TESTDLG,this);
pDlg->ShowWindow(SW_SHOW);
}
这样就OK了,但是这样每次执行这个菜单命令都会创建一次这个非模态对话框,想要只能创建一个时,改为:
void OnClicked
{
static CTestDlg *dlg = new CTestDlg;//必须静态,不然原来是dlg指针又重新分配地址
if(!IsWindow(dlg->m_hWnd)) //如果m_hwnd存在,就不创建
{
dlg->Create(IDD_TESTDLG,this);
dlg->ShowWindow(SW_SHOW);
}
}