MFC单文档之快速创建多个对话框类

1.新建一个对话框类

在资源目录下面插入dialog,同时更改其ID名,然后双击打开后右键添加类,基于CDialog,点击完成即可,然后在单文档的Mainfrm.cpp中可以通过点击三个目录弹出对应的三个对话框,这三个对话框都是基于刚刚建立的对话框类。

2.创建多个对话框类

为什么一个对话框类可以实现三个对话框的弹出还要创建多个对话框类?因为一个对话框类只能实现很简单的功能,如果每个弹出的对话框中要实现很多功能的话,那就最好各自都建立一个对话框类,比如我每个对话框中都要有状态指示灯,刚开始是准备在一个对话框类中声明所有的变量的,但是后来发现在两个对话框中都要调用时就会报错,于是必须各自新建一个类。

3.快速创建步骤

右键添加类,然后依照着第一个对话框类中的源文件和头文件中的内容,定义变量,消息映射函数,初始化函数,这里可以省略掉很多的步骤,只用复制粘贴相关代码到指定位置就行,比类向导快多了。

Mainfrm.h中:

#include "DLG.h"
#include "DLG_BM.h"
#include "DLG_CI.h"
afx_msg void OnIo();
    afx_msg void OnBasicmotion();
    afx_msg void OnContinuousintepolation();
CDLG *m_XDlg;
    CDLG_BM *m_XDlg1;
    CDLG_CI *m_XDlg2;

Mainfrm.cpp中:


void CMainFrame::OnIo()
{
    // TODO:  在此添加命令处理程序代码
    m_XDlg = new CDLG();
    m_XDlg->Create(IDD_IO, this);
    // 显示非模态对话框   
    m_XDlg->ShowWindow(SW_SHOW);
}


void CMainFrame::OnBasicmotion()
{
    // TODO:  在此添加命令处理程序代码
    m_XDlg1 = new CDLG_BM();
    m_XDlg1->Create(IDD_BASICMOTION, this);
    // 显示非模态对话框   
    m_XDlg1->ShowWindow(SW_SHOW);
}


void CMainFrame::OnContinuousintepolation()
{
    // TODO:  在此添加命令处理程序代码
    m_XDlg2 = new CDLG_CI();
    m_XDlg2->Create(IDD_CONTINUOUSINTEPOLATION, this);
    // 显示非模态对话框   
    m_XDlg2->ShowWindow(SW_SHOW);
}

4.各个对话框类中快速粘贴

以其中一个为例:

DLG_CI.h中:

public:
    virtual BOOL OnInitDialog();
    HICON m_hIconLedRed;
    HICON m_hIconLedGreen;
    HICON m_hIconLedBlue;
    CStatic m_StateLed157, m_StateLed158, m_StateLed159, m_StateLed160;

DLG_CI.cpp中:

void CDLG_CI::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_PIC157, m_StateLed157); DDX_Control(pDX, IDC_PIC158, m_StateLed158); DDX_Control(pDX, IDC_PIC159, m_StateLed159); DDX_Control(pDX, IDC_PIC160, m_StateLed160);

}

// CDLG_CI 消息处理程序
BOOL CDLG_CI::OnInitDialog()
{
CDialog::OnInitDialog();

// TODO:  在此添加额外的初始化
m_hIconLedRed = (HICON)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_LEDRED), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
m_hIconLedGreen = (HICON)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_LEDGREEN), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
m_hIconLedBlue = (HICON)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_LEDBLUE), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);

//初始化为红色
m_StateLed157.SetIcon(m_hIconLedRed); m_StateLed158.SetIcon(m_hIconLedRed); m_StateLed159.SetIcon(m_hIconLedRed); m_StateLed160.SetIcon(m_hIconLedRed);

return TRUE;  // return TRUE unless you set the focus to a control
// 异常:  OCX 属性页应返回 FALSE

}

5.看似复杂,其实非常快

欣赏效果吧:
第一个对话框
第二个对话框
第三个对话框

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值