MFC 设计对话框资源

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方法创建对话框。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值