例子为非模态对话框,ID为ID_MODELESS,为其创建一个类:CModelessDlg
在父对话框(ID_FIRSTUI)的相应按钮写上事件(以IDCANCEL为例):
void CFirstUIDlg::OnBnClickedCancel() { if (pDlg == NULL) { // 指针为空则创建非模态对话框并显示 pDlg = new CModelessDlg; pDlg->Create(IDD_MODELESS, this); pDlg->ShowWindow(SW_SHOW); } else { // 判断对话框可见状态,可见点击后隐藏,隐藏则点击可见 BOOL bVisible = pDlg->IsWindowVisible(); int nCmdShow = bVisible ? SW_HIDE : SW_SHOW; pDlg->ShowWindow(nCmdShow); } }
注:
1、pDLG在父对话框的头文件中定义CModeless *pDlg;
2、使用IsWindowVisible()时,需要指明对象。否则会导致指向当前对话框。