将一个窗口句柄嫁接到一个CWnd类型变量中。使用MFC应用程序向导,创建一个工程名为“vs”的对话框程序,演示通过函数建立关联变量。4)修改对话框初始化函数,通过调用函数建立控件窗口和变量的关联。6)为增、删、改3个按钮建立消息映射函数并修改代码。实际上类向导建立的关联变量,内部也是调用子类化函数实现的,但是使用向导建立关联变量更加方便一些。因此,在后续章节中,主要使用类向导建立关联变量。......
2023-11-25
在本章第5节中,通过“Win32 Application”建立的MFC32工程,目的是为了演示MFC工程的架构原理。一个MFC工程必须包含一个CWinApp的派生类,并定义一个派生类的全局变量theApp,最后重写InitInstance虚函数用于处理进程启动过程。如果要接收和处理一个对话框内部的消息,则必须创建一个CDialog派生类,最后通过类向导对相关消息建立消息映射函数。
本节直接通过“MFC AppWizard(exe)”来创建MFC工程,用于对照以上说明的MFC必备因素。
1)执行File→New命令,或按快捷键<Ctrl+N>弹出新建对话框,如图3-50所示。
图3-50 新建工程
在列表中选择“MFC AppWizard(exe)”,先选择一个目录,然后在“Project name”文本框中输入工程名“TestMFC”。
2)单击“OK”按钮后,选中“Dialog based”单选按钮,单击“Next”按钮,如图3-51所示。
图3-51 选择应用程序类型
3)取消“About box”复选框的选中状态,单击“Next”按钮继续,如图3-52所示。
图3-52 设置对话框
4)选中“As a statically linked library”,然后单击“Finish”按钮完成工程的创建,如图3-53所示。
图3-53 选择静态链接MFC库
5)MFC程序向导(App Wizard),主要生成了以App和Dlg结尾的2个派生类,如图3-54所示。
6)在类视图中双击InitInstance函数,把一些无用的代码删除整理后,这个函数的代码就很清晰了。
7)执行View→ClassWizard命令或者按快捷键<Ctrl+W>打开类向导,如图3-55所示。
图3-54 程序向导生成的代码
图3-55 MFC类向导(www.chuimin.cn)
在Class name下拉列表中选择CTestMFCDlg类,在Member functions列表框中显示4个已添加的回调函数。其中第一个图标“V”是代表虚函数类型的回调函数,另外3个函数的图标“W”是代表以“WM_”开头的消息回调函数。
8)在类向导中选中一个回调函数,单击“Delete Function”按钮即可删除一个回调函数。例如,删除OnQueryDragIcon函数时,主要包含以下3个部分被删除。
①头文件TestMFCDlg.h中的成员函数声明。
afx_msg HCURSOR OnQueryDragIcon();
②源文件TestMFCDlg.cpp中BEGIN_MESSAGE_MAP下面的消息关联代码。
ON_WM_QUERYDRAGICON(
③源文件TestMFCDlg.cpp中函数的定义。
Visual C++6.0的类向导删除功能只是删除了前两个部分,第三个部分的函数体代码没有删除,还需要开发者手动删除这部分代码。目的是防止该部分代码行数很多时,一旦删除了难以恢复。
9)在类视图中的一个类成员函数上单击鼠标右键,在弹出的快捷菜单中选择“Delete”命令也可以删除函数,如图3-56所示。
这种方式删除成员函数的效果比使用类向导删除成员函数的效果要好,因为它把函数体的代码注释后保留在源代码文件中。当然也可以全部使用手动的方式删除以上三部分代码。
10)创建消息回调函数和虚函数回调函数,如图3-57所示。
图3-56 在类视图中删除类成员函数
在类视图中一个窗口类的类名称上单击鼠标右键,在弹出的快捷菜单中选择“Add Virtual Function”命令,可在该窗口类内添加一个虚回调函数。如果选择“Add Windows Message Handler”命令,可在该窗口类内添加消息映射类型的回调函数。在类视图中通过菜单命令添加和删除回调函数,都比使用类向导更加方便快捷。在类向导(ClassWizard)的消息列表(Messages)中,列出的回调函数包括虚函数和消息回调函数两个部分。
11)在类视图中通过菜单命令,还可以创建MFC派生类或者普通类,如图3-58所示。
图3-57 在类视图中通过菜单命令添加回调函数
图3-58 在类视图中添加新类
12)在FileView中删除一个类。
如果要删除一个类,则必须手动将类声明和类定义文件(.h头文件和.cpp源文件)同时删除,并且在文件视图的编译列表中按<Delete>键将两个文件移除。最后在退出Visual C++6.0之前,执行File→Save workspace命令保存编译设置。
有关VC++就业培训宝典之MFC视频教程的文章
将一个窗口句柄嫁接到一个CWnd类型变量中。使用MFC应用程序向导,创建一个工程名为“vs”的对话框程序,演示通过函数建立关联变量。4)修改对话框初始化函数,通过调用函数建立控件窗口和变量的关联。6)为增、删、改3个按钮建立消息映射函数并修改代码。实际上类向导建立的关联变量,内部也是调用子类化函数实现的,但是使用向导建立关联变量更加方便一些。因此,在后续章节中,主要使用类向导建立关联变量。......
2023-11-25
选择“Control”表示建立控件型关联变量,选择“Value”表示建立数值型关联变量。使用MFC应用程序向导,创建一个工程名为“cal”的对话框程序,用于演示数值型关联变量。图6-15 建立数值型关联变量图6-16 添加多个数值型关联变量7)双击“计算”按钮,建立消息映射函数并修改代码。图6-17 查看运行结果本示例演示了通过类向导对编辑框和下拉列表控件建立数值型关联变量,并且结合调用UpdateData函数对数值型关联变量输入/输出。......
2023-11-25
本节演示在MFC中,开发弹出对话框的过程和弹出对话框消息处理的过程。MFC的消息处理不是使用一个全局的回调函数,而是创建一个与窗口关联的派生类,用于消息关联的成员函数来接收和处理窗口的消息。在类向导中选择对应的消息,添加与该消息关联的成员函数来处理该消息,这就是MFC的消息映射机制。MFC的消息映射机制,一般不需要开发者解析这些复杂的数据,因为消息映射函......
2023-11-25
CBrush类的主要成员见表7-4。表7-4 CBrush类的主要成员1)用于填充的阴影线风格主要包括以下几种。创建一个工程名为“Brush”的对话框程序,用于演示选用不同画刷进行绘画的效果。2)在资源视图中,单击鼠标右键,在弹出的快捷菜单中,选择“Import”命令导入位图,如图7-16所示。图7-19 查看运行结果CBrush类构造函数与CreateSolidBrush和CreateHatchBrush等函数的功能基本一样,都可以用于创建一个画刷。一般当使用新画刷绘画结束后,最好恢复选择回旧画刷。......
2023-11-25
标签控件,又称选项卡控件。很多软件的用户资料注册部分是采用注册向导模式,而用户资料修改则采用标签控件管理模式。打开本章第3节建立的“usd”工程,本节继续演示采用标签控件来管理多个分页。1)新插入一个对话框资源,作为使用标签控件进行分页管理的父窗口,如图9-20所示。6)添加标签控件的TCN_SELCHANGE消息反射函数OnSelchangeTab,如图9-22所示。图9-24 查看运行结果单击“修改”按钮或者双击列表选项,就会打开带标签控件的修改资料的对话框。......
2023-11-25
打开本章第7节建立的“Tp”工程,继续演示CWinApp类的开发应用。1)修改启动函数CWinApp派生类的构造函数代码。m_pszAppName成员变量有三种途径赋值,首先在CWinApp构造函数中获得字符串。在App派生类以外,调用CWinApp类成员函数的方法有两种。CWinApp类的成员函数LoadIcon和LoadStandardIcon,实际上是封装了API函数LoadIcon的结果。和加载图标的两个函数一样,CWinApp类的成员函数LoadCursor和LoadStandardCursor,分别用于加载程序光标和系统光标资源,它们封装的也是同一个API函数LoadCursor。......
2023-11-25
创建一个工程名为“Mdc”的对话框程序,演示CMemDC类的封装及调用过程。2)选中“C/C++Header File”项,输入“MemDC”后单击“OK”按钮,如图8-2所示。图8-3 编辑主对话框资源5)在主对话框类的头文件中,修改代码,增加两个CMemDC类对象。图8-4 添加WM_SIZE消息映射函数7)修改消息映射函数代码,当窗口大小变化时在内存DC中缩放背景图。图8-5 查看运行结果本示例重点演示了CMemDC类的封装过程,以及加载文件位图和创建内存DC的方法。......
2023-11-25
在显示透明图片时,必须去除透明色区域的像素只显示非透明色区域的像素,形成不规则边缘的图像。创建一个工程名为“Trans”的对话框程序,用于演示透明图片的显示方法。3)把本章第1节的MemDC.h文件复制到Trans工程目录中,通过文件视图中的“Add Files to Project”命令添加到编译列表中,如图8-8所示。图8-9 选择要导入到工程中的文件图8-10 将MemDC.h文件添加到编译列表6)在文件列表中双击MemDC.h文件,增加显示透明位图的代码。......
2023-11-25
相关推荐