模态对话框:
1、 在资源里新建对话框
2、 class wizard 新建相应的对话框类,继承于CDialog类
3、 在相应的响应函数中添加如下代码(别忘记包含类的头文件):
CXXXDialog XXX;
XXX.DoModal();
4、Note:
MFC菜单需要注意的是,菜单有两个,一个是空框架下的,一个是有文档下的,因此要注意响应函数函数的位置,比如,如果响应函数是在View下面,那么在空框架下菜单项按钮就是灰色的,不能操作。
非模态对话框:
要用到基类的create函数,为了防止对象生命周期的结束而结束对话框,采用指针。
CDialog1 *DIA = new CDialog1;
DIA->Create(IDD_DIALOG1,this);
DIA->ShowWindow(SW_SHOW);
非模态对话框不同于模态对话框,非模态对话框需要销毁。
在派生对话框类中,重写以下两个函数,销毁窗口。
void CTestDlg::OnCancel()
{
}
void CTestDlg::OnOk()
{
}
在派生对话框类中,重写以下函数,释放指针。
void CTestDlg::PostNcDestroy()
{
}
MSDN原文:
When
判断非模态对话框是否关闭:
在所属类中设置改对话框的指针成员变量,初始化为NULL
对话框类中设置成员变量 view指针;
对话框销毁时,view类的成员变量指针设为NULL;
这样,当该指针为NULL时,表示对话框已关闭。
问题:想尝试用发送消息的方式,为什么在对话框类里面GetParent()出错;GetParent()得到的是什么?
2014、5、22
从CDialogEx继承的模态对话框在点击对话框区域外时,没有声音和闪烁提醒,(为什么?)
从CDialog继承就可以了。