本节演示在MFC中,开发弹出对话框的过程和弹出对话框消息处理的过程。MFC的消息处理不是使用一个全局的回调函数,而是创建一个与窗口关联的派生类,用于消息关联的成员函数来接收和处理窗口的消息。在类向导中选择对应的消息,添加与该消息关联的成员函数来处理该消息,这就是MFC的消息映射机制。MFC的消息映射机制,一般不需要开发者解析这些复杂的数据,因为消息映射函......
2025-09-30
无论是模式对话框还是非模式对话框,都可以直接申请基类CDialog对象来创建。创建CDialog派生类的原因是,在派生类中可以接收对话框的消息映射和虚函数回调,响应来自用户的操作和系统事件。
窗口创建时的消息和虚函数包括WM_CREATE、WM_INITDIALOG和PreSubclassWindow等;窗口关闭时的消息和虚函数包括WM_CLOSE、WM_DESTROY、OnOK和OnCancel等。有些消息是所有窗口都通用的,例如,WM_CREATE、WM_CLOSE和WM_DESTROY等。有些消息和虚函数是对话框专用的回调函数,例如,WM_INITDIALOG消息以及OnOK、OnCancel等虚函数。
通过MSDN的说明可以查看到,WM_CREATE和WM_INITDIALOG都是窗口刚创建时的回调消息,当窗口还未显示出来之前,对窗口作预先处理的回调函数。WM_CREATE是所有窗口通用的创建时回调消息,用于包括对话框、MDI或者SDI等任何窗口的初始化,对应的消息映射函数是OnCreate。可以在该函数中编写代码,在窗口刚创建还未显示时,修改父窗口的属性或者创建内部子窗口。WM_INITDIALOG对话框是对话框专用消息,最常用来初始化对话框及其内部控件,对应的消息映射函数是OnInitDialog。基类函数CDialog::OnInitDialog执行过程将所有对话框资源模板内的控件都创建完毕。因此,可以在该函数中,编写代码来对子窗口作初始化设置。
打开第1节建立的“Test”工程,本节继续演示对话框启动过程的回调函数。
1)在类视图中的主对话框类上单击鼠标右键,在弹出的快捷菜单中,选择“Add Windows Message Handler”命令,如图4-14所示。
2)在左边的消息列表中,选中WM_CREATE消息再单击“Add Handle”按钮,或者直接双击该列表项添加一个消息映射函数,如图4-15所示。

图4-14 消息映射管理器

图4-15 添加消息映射函数
3)WM_CREATE转移到右边列表中,代表已经添加了该消息的消息映射函数,如图4-16所示。

图4-16 已经添加消息映射函数
4)单击“Edit Existing”按钮,修改OnCreate函数的代码。
(https://www.chuimin.cn)

5)编译并运行,测试代码,可以看到在对话框弹出之前标题已经被修改,如图4-17所示。

图4-17 查看运行结果
6)修改OnInitDialog函数的代码。

7)编译并运行,测试代码,如图4-18所示。

图4-18 查看修改后的运行结果
通过两次修改窗口标题,可以判断出OnCreate函数的回调时间早于OnInitDialog。
8)再修改两个函数的代码,添加一行代码并测试。

测试结果说明,在OnInitDialog函数中子窗口都已经创建完成,可以任意对子窗口进行初始化操作。而在OnCreate函数中,对话框中的控件子窗口还未创建,不可以操作控件窗口。
相关文章
本节演示在MFC中,开发弹出对话框的过程和弹出对话框消息处理的过程。MFC的消息处理不是使用一个全局的回调函数,而是创建一个与窗口关联的派生类,用于消息关联的成员函数来接收和处理窗口的消息。在类向导中选择对应的消息,添加与该消息关联的成员函数来处理该消息,这就是MFC的消息映射机制。MFC的消息映射机制,一般不需要开发者解析这些复杂的数据,因为消息映射函......
2025-09-30
在本章第5节中,通过“Win32 Application”建立的MFC32工程,目的是为了演示MFC工程的架构原理。一个MFC工程必须包含一个CWinApp的派生类,并定义一个派生类的全局变量theApp,最后重写InitInstance虚函数用于处理进程启动过程。本节直接通过“MFC AppWizard”来创建MFC工程,用于对照以上说明的MFC必备因素。图3-54 程序向导生成的代码图3-55 MFC类向导在Class name下拉列表中选择CTestMFCDlg类,在Member functions列表框中显示4个已添加的回调函数。......
2025-09-30
对话框资源编辑既包括对话框自身的属性设置,还包括对话框内的每个控件的属性设置。对话框和内部的每个控件都有自己的资源ID,ID是一些不重复的数字标志,就如同学号或者身份证号是不重复的数字一样。#define IDD_FIRSTMFC_DIALOG 102#define IDR_MAINFRAME 128#define IDC_NUMB 1000#define IDC_NAME 1001#define IDC_SALA 1002#define IDC_LIST 1003#define IDC_ADD 1004#define IDC_DEL 1005#define IDC_MOD 10061)对话框资源自身的属性包括5个分页,如图2-34所示。Control:对话框启动后去掉标题栏。Accept files:允许从外部拖放一些文件放入对话框内,并在拖放后产生WM_DROPFILES消息。......
2025-09-30
MSDN通俗地说就是Visual C++6.0的 使用说明书。1)打开MSDN的方法如下。执行“开始”→“程序”→“Microsoft Developer NetWork”→ “MSDN-Library”命令。②从VisualC++6.0的帮助菜单中打开。在Visual C++6.0主菜单中,执行Help→Index命令即可。在Visual C++6.0的源代码窗口中,选中一个函数名后按<F1>键。在MSDN左侧的索引中输入“printf”然后按<Enter>键,打开关于该函数的说明。一个函数的说明主要包括以下7个部分。......
2025-09-30
1)SendMessage和PostMessage函数都是消息传递函数,通过MSDN查看两个函数的格式。2个函数的4个参数的意义是一样的,只有返回值类型不同,LRESULT表示消息被处理后的返回值,BOOL表示消息是否传递成功。3)新建一个Win32工程,编写一段简单的代码测试消息传递函数。在MFC程序中,必须使用ON_MESSAGE来关联消息映射函数。PostMessage是非阻塞的,不等OnPostMessage执行完就继续向下执行,而且返回值是1,代表消息已经传送到。......
2025-09-30
库函数并不是C语言的一部分,它是由编译系统根据一般用户的需要编制并提供给用户使用的一组程序。每一种C编译系统都提供了一批库函数,不同的编译系统所提供的库函数的数目和函数名以及函数功能是不完全相同的。考虑到通用性,只从教学需要的角度列出最基本的ANSI C建议的常用库函数。......
2025-09-30
C标准库中包含了许多用于字符或者字符串处理的标准库函数,本小节讨论其中最常用的字符分类函数和字符串处理函数的使用方法。表6.1常用字符分类标准函数字符分类函数应用。表6.2常用字符串处理标准函数续表字符串长度计算字符串长度计算的基本思想是:依次统计每个字符数据,直到字符串结束符'\0'为止。③字符串s1小于字符串s2时,函数返回负整数值......
2025-09-30
例如:表14-12 符号类型2.ATOM函数。本函数对任何非表的变元均被认为是原子。在调用atomfamily函数时,如果你提供了<symlist>变元,atomsfamily函数就会在系统中对指定的符号名表进行搜索。对于没有定义的那些符号名,在它所返回的表的对应位置上以nil表示。该函数检查其个项的值是否约束为nil。atomsfamily函数为确定一个符号的存在性提供了另一种可供选择的方法,atomsfamily函数并不自动生成一个符号。检查某一个项是否是一个实型数或整型数。......
2025-09-30
相关推荐