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)
- MFC的Dialog模式创建窗体以及控件绑定
- 创建未绑定的 Windows 窗体 DataGridView 控件
- [MFC]Dialog上的控件MoveWindow时会触发主窗体的WM_MOUSEMOVE
- 【初学者】基于Dialog的模式与非模式窗体的创建
- android的无标题dialog以及dialog样式的窗体
- android的无标题dialog以及dialog样式的窗体
- MFC点击Dialog窗体可拖动的实现
- 如何修改 MFC Dialog 窗体的类名???
- MFC 窗体控件选择的问题
- MFC的windows窗体创建过程
- Android—点击自定义dialog窗体的控件销毁自己
- mfc调用窗体控件
- 安卓控件之对话框Dialog以及建造者模式
- MFC 创建不规则窗体
- 创建自定义形状的窗体和控件
- 创建显示进度的 Windows 窗体控件
- 不规则窗体和控件的创建
- 弹出dialog 窗口; 以及在dialog 中关闭并且刷新父窗体的方法
- 用思维导图整理产品结构
- Java网络编程——第十章 非阻塞I/O
- JS if语句
- Java怎么部署工程及访问不带项目名的工程
- PHP语言性能优化——少使用魔术方法
- MFC的Dialog模式创建窗体以及控件绑定
- 进程间通信——共享内存
- 算法设计与应用基础:第十六周(1)
- leetcode已完成题目索引
- centos7忘记root密码
- C++/MFC-动态链接库(DLL)
- 离别季,思念万里长
- #7 绑定
- JS if else应用 猜数