MFC的Dialog模式创建窗体以及控件绑定

来源:互联网 发布:达州市行知中学 编辑:程序博客网 时间:2024/05/18 19:19

一、建立工程:

新建工程:MFC应用-->基于对话框-->高级功能全去掉




点完成,至此,基于对话框的MFC工程即建立完成。


二、给按钮添加事件响应函数

在按钮上右击属性-->点事件-->添加事件

如图,为新建工程的对话框,右击“确定”按钮,添加事件处理函数。



系统会自动添加事件处理函数,在事件处理函数中可以添加自己的处理代码。


三、添加窗体

右击工程添加类-->MFC-->基类为CDialog



添加完成后,系统会自动在工程中添加一个窗体,从上图中也可以看出窗体对话框的ID为IDD_TEST。


四、值绑定与控件绑定

1、值绑定:(有两种方法)

 方法1:

直接在控件上右击,添加变量。


点击完成后,系统会自动将控件上的数据直接绑定到变量中。

方法2:

自己添加变量,三处改动:在.h文件类定义中添加变量声明(public)。在.cpp文件构造函数中添加变量初始化,在DoDataExchange函数(在.cpp)中将变量和控件进行绑定。(虚函数:DoDataExchange(不能直接调用)

绑定方法:

DDX_Text(pDX, IDC_STUID, m_stuID);//(所有的绑定语句都是用DDX开头的)绑定语句:将(通过控件的id号找到控件)控件所产生的文本绑定到m_stuID上。//还会对变量类型进行判定,输出提示信息


2、控件绑定(返回是控件,可以直接调用函数)

在DoDataExchange函数中以下这句会自动添加
DDX_Control(pDX, IDC_STUSCORE, m_stuScoreCtrl);//将控件绑定到m_stuScoreCtrl变量上,可以认为m_stuScoreCtrl就是控件。

[

DDX_TEXT()的作用可以理解为把字符串变量和控件的文本(WindowText)关联起来, 
DDX_Control()的作用可以理解为把变量和控件本身关联起来, 

]

3、获取文本控件框中的值进行操作

两种方法间接调用:UpdateData(true)[整个窗体进行刷新]控件里的值传回到变量](UpdateData只对值绑定起作用)
        UpdateData(false)变量里的值传回到控件


五、在主对话框中点击按钮创建新的窗体

在三中我们已经添加了新的窗体,那怎样通过主对话框中的按钮,调用新的窗体,将新的窗体进行显示?

两种方法:

//方法1:模式对话框(在按钮的事件处理函数中直接添加)CAddStudentDlg dlg;dlg.DoModal();//模式对话框==阻塞对话框(只要这个对话框一运行,程序就被阻塞在这里)不会继续往下执行
//方法2:非模式对话框用指针(需要创建在堆区),如果直接在事件处理函数中新建对象在栈区,(而且用本非阻塞方法),要不需要在事件处理函数外delete[将dlg声明为母窗体类的成员变量]一般在母窗体构造函数中创建,dlg = new CAddStudentDlg;//在需要显示的(按钮按下就显示)Dlg类的构造函数中添加//new的是显示的dlg窗体类。dlg->Create(IDD_ADDSTUDENTDLG, this);//IDD_ADDSTUDENTDLG是需要显示的窗体类的.h文件中的对话框数据enum { IDD = IDD_TEST };                                        在析构函数中deleteif (dlg!=NULL)    delete dlg;在事件处理函数中显示dlg->ShowWindow(SW_SHOW);//非阻塞的


六、总结整个Dialog程序的执行流程

MFC Dialog 执行步骤:
1、实例化app-------调用app的构造函数【可以自己改,但这里最好少】
2、执行main函数------mfc封装起来
a)调用app下的initInstance函数
【可以自己改BEGIN_MESSAGE_MAP,所有的业务逻辑需要写在对话框中的事件处理函数中】
( 
BEGIN_MESSAGE_MAP(CMFCStudentDlg, CDialogEx)
ON_XXXXX()   //比如自己添加了按钮点击事件,会在此
END_MESSAGE_MAP()

创建对话框对象--------[对话框中的事件处理函数在此]
所有对话框创建出来都先调用OnInitDiglog()函数;【函数可以在这里填写代码】
显示对话框对象
b) 执行消息循环(取出消息给a)




原创粉丝点击