1*- 利用资源视图向导创建对话框资源
首先在资源视图中创建一个对话框资源
在属性框中设置好ID例如IDD_BOOKDLG。
右键新建的对话框,点击添加类
在类中设置好Name 例如CBook 完成,这样对话框类CBook与对话框资源IDD_BOOKDLG就建立了关联。
2*-创建并显示对话框
(方法一)创建模式对话框
双击主窗口的按钮,转到代码页后,先 在头部引用头文件
#include "Book.h"
接着在按钮响应事件中输入以下代码
void CMFC测试Dlg::OnBnClickedOk()
{
CBook Book; //定义CBook对象
Book.DoModal(); //调用DoModal方法显示模态对话框
}
在新建的对话框关闭前无法激活朱对话框,因为新创建的对话框是模式对话框。即利用new运算符来构建对象,使用delete运算符来释放对象。
CBook *pBook=new CBook();
pBook->DoModal();
delete pBook;
(方法二)创建非模式对话框
进入主对话框类定义的头文件部分,引用对话框类CBook的头文件
#include "Book.h"
在对话框类中定义一个CBook类型的成员变量
private:
CBook m_Book; //添加CBook类型的成员变量
回到资源视图中,点击主窗口中的按钮,编写按钮的单击事件代码,
void CMFC测试Dlg::OnBnClickedOk()
{
m_Book.Create(IDD_BOOKDLG,NULL); //创建对话框
m_Book.ShowWindow(SW_SHOW); //显示对话框
}
此时就可以进行对话框切换,将主对话框激活,但是当吧非模式对话框关闭后,在单击按钮时将会出现错误。
这是因为关闭非模式对话框时,只是隐藏了对话框,二没有销毁由create方法创建的对话框资源,此时在调用create方法创建对话框时,由于当前的m_Book对象已经有了关联的对话框,因此导致了上述错误,解决方法如下
void CMFC测试Dlg::OnBnClickedOk()
{
if (!IsWindow(m_Book.m_hWnd)) //是否关联对话框了
{
m_Book.Create(IDD_BOOKDLG, NULL); //创建对话框
}
m_Book.ShowWindow(SW_SHOW); //显示对话框
}
使用IsWindow函数来判断m_Book对象是否关联了对话框,如果没有,在调用create方法创建对话框。