mfc中dialog如何基于系统风格_MFC的Dialog模式创建窗体

一、建立工程:

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

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

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

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

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

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

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

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

三、添加窗体

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

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

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

四、值绑定与控件绑定

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

方法1:

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

0818b9ca8b590ca3270a3433284dd417.png

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

方法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 };

在析构函数中delete

if (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)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值