关闭

MFC 设计对话框资源

115人阅读 评论(0) 收藏 举报
分类:

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

0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:10938次
    • 积分:849
    • 等级:
    • 排名:千里之外
    • 原创:76篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类