MFC与对话框
来源:互联网 发布:unity3d raycasthit 编辑:程序博客网 时间:2024/06/08 04:05
一般来说,设计对话框的主要步骤是这样的:
1、对话框的UI设计。
2、从MFC的CDialog中派生一个类,用来负责对话框的行为。
对话框UI的设计这里不再详述。下面主要说说对话框行为的设计。以VS2008为开发环境来描述。
首先为对话框关联一个类,此类派生于CDialog,做法是:
1、右键单击对话框,选择“添加类”
2、在界面中,输入类名。可以观察到,在对话框ID上,已经默认为当前选择的对话框ID了。
3、接下来,IDE为我们自动添加了cpp和h文件,以及添加了若干代码。
下面我们看看自动添加的代码:
// CTestDlg.h
class CTestDlg : public CDialog
{
DECLARE_DYNAMIC(CTestDlg)
public:
CTestDlg(CWnd* pParent = NULL); // 标准构造函数
virtual ~CTestDlg();
// 对话框数据
enum { IDD = IDD_DIALOG1 };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
};
// CTestDlg.cpp
IMPLEMENT_DYNAMIC(CTestDlg, CDialog)
CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTestDlg::IDD, pParent)
{
}
CTestDlg::~CTestDlg()
{
}
void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
END_MESSAGE_MAP()
以上代码中,主要产生了这几个东西:
1、Data Map,其中牵涉到 DDX/DDV。
2、Messagemap
3、对话框类
4、函数骨干
DDX:Dialog Data eXchange,就是将对话框上的控件绑定到对话框类的成员变量上,以实现数据的交换。
例如:添加一个编辑框控件,与成员变量m_edit绑定(假设绑定为int类型),此时,在编辑框中输入数字,再通过UpdateData函数进行刷新,就可以将输入的数据交换到m_edit中。
DDV:Dialog Data Validation,就是对于以上交换的数据进行效验。例如:m_edit是表示月份的,范围只能是1~12,这时,就可以设置一个DDV,如输入超出这个范围,则弹出相应的对话框提示。
来看一个DDX和DDV的示例:
我们在对话框中添加一个edit控件,ID为IDC_TEST.
接下来右键选择此控件->添加变量->类别:value->变量类型:int->变量名->最小值:1->最大值:12。
设置好之后确定,观察代码,IDE为我们添加了如下代码:
//**.h
int m_test;//变量
//**.cpp
CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTestDlg::IDD, pParent)
, m_test(0)
void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_TEST, m_test);
DDV_MinMaxInt(pDX, m_test, 1, 12);
}
可以清楚的看到DDX和DDV实现形式。
再看看构造函数
CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTestDlg::IDD, pParent)
{
}
首先明确,CTestDlg的构造函数会引发CDialog的构造函数,传递两个参数,产生一个模态对话框。两个参数分别是对话框ID和父窗口指针。
其次,CTestDlg::IDD这个参数定义于头文件中, enum { IDD = IDD_DIALOG1 }。这样CTestDlg类就与对话框资源建立了关联。
最后看看对话框对控件动作的响应,也就是前面文章对windows消息阐述中的控件消息。 在对话框上,对确定按钮点击右键,选择添加事件处理程序,消息类型选择:BN_CLICKED。这样就添加了一个按钮被点击后的响应函数。 以上操作对程序的影响如下: afx_msg void OnBnClickedOk(); //**.cpp BEGIN_MESSAGE_MAP(CTestDlg, CDialog) ... void CTestDlg::OnBnClickedOk()
//**.h
ON_BN_CLICKED(IDOK, &CTestDlg::OnBnClickedOk)
END_MESSAGE_MAP()
{//响应函数
}
以上就完成了一个对话框类的设计,最后就可以在程序中以此类创建成员变量,并显示。
- MFC与对话框
- MFC与对话框
- MFC模态对话框与非模态对话框
- MFC模态对话框与非模态对话框
- MFC模态对话框与非模态对话框
- MFC模式对话框与非模式对话框
- MFC模态对话框与非模态对话框
- MFC模态对话框与非模态对话框
- MFC中模态与非模态对话框
- MFC对话框与数据交换
- MFC 打开与保存对话框
- MFC对话框建立与关闭
- mfc MFC 关闭非模态对话框 与 模态对话框
- MFC-对话框与数据交换
- MFC子对话框建立与关闭
- MFC对话框与基础控件个性化
- MFC模态对话与非模态对话框
- MFC-对话框与数据交换 .
- 利用FlashPape实现在线文档查看功能(一) 资源介绍
- [转]关于MYSQL的show status解详
- grep用法大全
- 浅谈如何局域网打印共享
- 将DataSet中的数据导出Excel
- MFC与对话框
- C++中枚举类型++运算符重载
- LINK 2001 error:
- Source Insight技巧收集
- scatter file知识
- stack over flow at line 0 原因之一
- 『国际观察』 [经济博弈]世界各国房价收入比(献给包括我在内的各位房奴)(转载)
- 中关村GHOSTXPSP3纯净装机自选CD版V2010.02(FAT32/NTFS) 首款整合“极光”漏洞补丁
- vc使用msxml解析xml文档