从MFC对话框理解Windows消息机制

本文深入探讨了MFC对话框的创建过程,包括模式和非模式对话框的生命周期,数据交换机制,Radio Button的分组,以及一些实用技巧。详细介绍了通过OnInitDialog()初始化控件,UpdateData()函数实现数据同步。此外,文章还讲解了窗口销毁的过程,分析了不同窗口类的销毁机制和Delete与DestroyWindow的交互,强调了正确管理窗口对象的重要性。
摘要由CSDN通过智能技术生成

<第一部分:MFC窗口的创建过程>
1、对话框基本要点和生命周期
MFC对话框支持“所见即所得”编程模式。其类型分为模式对话框和非模式对话框。
对话框由一个rc资源文件描述外观,通过ID与一个CPP类相连接,对话框内的控件使用基于ID的变量映射通讯。
模式对话框对象被定义后,通过调用DoModal()函数来显示对话框并进行相关操作,此函数当对话框被关闭时返回。其返回值标明了对话框是

点“确定”退 出,还是“取消”。非模式对话框需要与某个View相关联,以便对话框退出时发送消息给对应的Vew进行必要的处理。
在对话框显示前,系统会调用OnInitDialog() 函数,在这个函数中你可以设置一些控件属性,进行一些初始化工作。比如,设置滚动条的最

大最小值,设置List列表的初始值等。其方法是将控件ID作为参 数,调用GetDlgItem函数获得控件的对象的指针(指针类型是CWnd*),然

后使用对象提供的函数进行操作。
ID对于一个组件来说非常重要,通过向导,我们可以将一个变量和一个组件进行关联(映射)来实现数据交换,而这种绑定的关键就是将一

个组件的ID与成员变量关联。

2、数据交换机制
控件是对话框的重要组成部分,控件的访问可以通过关联变量实现,包括关联数据变量和控制变量。MFC编程中,通过建立类向导中 的操作

可以将窗口控件和对应变量绑定,但是代码操作的是变量,用户操作窗口控件如何让他们同步?UpdateData(Bool true|false)函数正是实现

这个功能。

DoDataExchange由框架类调用,用于交换和检验对话框的数据,该函数不直接调用,而是被UpdateData调用。通过update(TRUE)取得控件上

的值,处理修改后通过update(FALSE)传回控件。

UpdateData(TRUE) -- 刷新控件的值到对应的变量
UpdateData(FALSE) -- 拷贝变量值到控件显示

UpdataData()---用来刷新对话框

3、特殊的Radio Button
Radio Button控件是分组的,同一组的Radio Button只能有一个被选中。这个机制的实现依赖于TAB顺序,在资源视图下按Ctrl-D键将显示对

话框的TAB焦点顺序。举一个例子来说明:
Radio1、Radio2、Radio3是三个不同的Radio Button控件,其焦点顺序为1、2、3。为了实现分组Radio1的Group属性应该为TRUE,其余两个

为FALSE。如果又有两个 Radio4、Radio5焦点顺序为6、7。则Radio4的Group属性应为TRUE,Radio4,Radio5被分为一组。
需要注意的是,Radio以Group属性来分组,为了结束前一个组,你应该将焦点顺序为4、8的控件的Group属性设为TRUE,否则编译器会产生一

个警告。

4、一些技巧
通过向导,我们可以将一个类成员变量和控件关联以进行数据交换,例如将一个CString类型的变量和Edit控件关联。将一个in

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值