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.看似复杂,其实非常快
欣赏效果吧: