本节演示在MFC中,开发弹出对话框的过程和弹出对话框消息处理的过程。MFC的消息处理不是使用一个全局的回调函数,而是创建一个与窗口关联的派生类,用于消息关联的成员函数来接收和处理窗口的消息。在类向导中选择对应的消息,添加与该消息关联的成员函数来处理该消息,这就是MFC的消息映射机制。MFC的消息映射机制,一般不需要开发者解析这些复杂的数据,因为消息映射函......
2023-11-25
在第2章中的计算器程序中,实际上已经使用了消息处理机制。当单击“计算”按钮和“关闭”按钮时,通过switch语句解析出WM_COMMAND消息,再根据按钮的ID当单击不同的按钮时作不同的处理。在回调函数中通过分支语句对消息进行解析和处理,就是Win32程序的消息处理机制。
下面新建一个Win32程序,进一步演示Win32程序的消息处理机制。
1)执行File→New命令或按快捷键<Ctrl+N>,建立Win32应用程序,如图3-24所示。
图3-24 建立Win32应用程序
2)填写工程名“Test32”后单击“OK”按钮,工程就建立好了,如图3-25所示。
图3-25 建立好的Win32工程
3)再次执行File→New命令或按快捷键<Ctrl+N>,在Win32工程内添加资源脚本。在弹出的新建对话框的Files分页中,选中“Resource Script”列表项,在“File”文本框中填写一个资源名称(最好与工程名一致),如图3-26所示。
图3-26 添加资源脚本
4)单击“OK”按钮后,在工作区中出现ResourceView分页。
在资源视图中单击属性控件的根节点,提示“This file is already open in an editor”,只要关闭右边正在编辑的窗口即可,如图3-27所示。
图3-27 查看资源视图
5)在ResourceView中树形控件的根节点上单击鼠标右键,在弹出的快捷菜单中选择“Insert”命令,或者按快捷键<Ctrl+R>弹出插入资源的对话框,如图3-28所示。
6)在插入资源对话框中选中“Dialog”,并单击“New”按钮插入一个对话框资源,如图3-29所示。
图3-28 在资源视图中插入资源
图3-29 插入对话框资源
7)修改WinMain函数,编写弹出对话框的代码。
(www.chuimin.cn)
8)编译并运行,测试代码,如图3-30所示。
弹出了一个对话框,单击“OK”或者“Cancel”按钮,都可以关闭对话框。
9)在关闭Visual C++6.0时有可能弹出提示,如图3-31所示。
说明工作区中编译列表发生了一些改变,是否需要保存这个改动。因为在插入资源脚本时,编译列表中增加了一个“.rc”文件。单击“是”按钮保存这个变动,或者在退出前执行File→Save workspace命令提前保存编译列表。
图3-30 查看运行结果
图3-31 保存工作区设置
10)继续修改消息回调函数,增加一些消息的种类,进一步观察Win32程序的消息处理机制。
11)编译并运行,测试代码,如图3-32所示。
在本例中WM_PAINT消息用于界面绘图和WM_ LBUTTONDOWN处理单击左键操作。
在代码窗口内选中一个WM_COMMAND或其他消息,选择“Go To Definition of xxx”或者按<F12>键,进入“WINUSER.h”头文件。其中列出了所有以“WM_”开头的(Windows Message)宏定义。Windows中常见的消息及其说明见表3-3。
图3-32 查看运行结果
表3-3 Windows中常见的消息及其说明
(续)
有关VC++就业培训宝典之MFC视频教程的文章
本节演示在MFC中,开发弹出对话框的过程和弹出对话框消息处理的过程。MFC的消息处理不是使用一个全局的回调函数,而是创建一个与窗口关联的派生类,用于消息关联的成员函数来接收和处理窗口的消息。在类向导中选择对应的消息,添加与该消息关联的成员函数来处理该消息,这就是MFC的消息映射机制。MFC的消息映射机制,一般不需要开发者解析这些复杂的数据,因为消息映射函......
2023-11-25
②“//{{AFX_MSG”下面的代码,是用来管理以“WM_”开头的Windows消息映射函数的。消息映射函数,就是MFC自动把每个消息分离出来,并关联到一个类成员函数上。它是另一类回调函数,和消息回调映射函数类似。基于以上宏定义,把消息映射关联代码替换成原型后会发现ON_WM_MOUSEMOVE是WM_MOUSEMOVE消息和OnMouseMove成员函数地址的关联。4)解密消息映射宏定义。messageMap结构体主要是建立和处理基类消息和派生类消息之间的关系。......
2023-11-25
1)SendMessage和PostMessage函数都是消息传递函数,通过MSDN查看两个函数的格式。2个函数的4个参数的意义是一样的,只有返回值类型不同,LRESULT表示消息被处理后的返回值,BOOL表示消息是否传递成功。3)新建一个Win32工程,编写一段简单的代码测试消息传递函数。在MFC程序中,必须使用ON_MESSAGE来关联消息映射函数。PostMessage是非阻塞的,不等OnPostMessage执行完就继续向下执行,而且返回值是1,代表消息已经传送到。......
2023-11-25
在本章第5节中,通过“Win32 Application”建立的MFC32工程,目的是为了演示MFC工程的架构原理。一个MFC工程必须包含一个CWinApp的派生类,并定义一个派生类的全局变量theApp,最后重写InitInstance虚函数用于处理进程启动过程。本节直接通过“MFC AppWizard”来创建MFC工程,用于对照以上说明的MFC必备因素。图3-54 程序向导生成的代码图3-55 MFC类向导在Class name下拉列表中选择CTestMFCDlg类,在Member functions列表框中显示4个已添加的回调函数。......
2023-11-25
在一些MFC派生类中重写OnCmdMsg虚函数,可以对WM_COMMAND消息的发送路径进行管理。例如,在主框架类中收到命令消息后,调用活动视图子窗口的OnCmdMsg函数,让活动视图子窗口得到优先处理。创建一个工程名为“cm”不使用文档视图架构的SDI程序,用于了解命令传递机制。7)在OnFocus和OnCmdMsg两个函数中,也删除ChildView的代码。图13-36 查看运行结果通过重写OnCmdMsg函数,将主框架内接收的命令消息准确地分发给两个视图子窗口。......
2023-11-25
在Windows应用程序中,设备环境与图形对象协同进行绘图显示工作。就像画家绘画一样,设备环境好比是画家的画布,图形对象好比是画家的画具。1)GDI对象包括六种类型,全部由CGdiObject类派生,如图7-14所示。④CBitmap(位图):用于显示和处理点阵图像的GDI对象。图7-14 GDI对象2)颜色类型变量COLORREF的定义。typedef DWORD COLORREF;typedef DWORD *LPCOLORREF;COLORREF是4字节(32位)变量,用于描绘一个颜色时对应于十六进制格式是0x00bbggrr。3)RGB宏函数颜色处理函数。常见颜色的RGB数值见表7-2。......
2023-11-25
IMS学习设计的概念模型分为A、B、C三层,依次扩充。Level C为学习设计者增加了基于某种事件而定义消息发送和设置新行为的能力。通过消息机制使学习设计可以实现更复杂的学习流程,比如学生提交作业将给教师发送相应消息,触发教师的相应行为,如评价作业,以决定学生是否可以进入下一个学习环节。......
2023-11-07
互联网网络通信的基础是TCP/IP,即传输控制协议和网络互联协议。按照TCP/IP规定,32位IP地址用4个字节来表示,例如,“192.168.1.100”。图15-1 通过命令查看本机网络配置在“本地连接”的属性设置对话框中,双击“Internet协议”,如图15-2所示。图15-2 查看网络邻居属性图15-3 TCP/IP属性设置在TCP/IP中计算机软件通信必须依赖于通信端口,端口号的范围是0~65535。......
2023-11-25
相关推荐