⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 04.1.1 classwizard.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
4.1.1 ClassWizard 
为了给视类添加鼠标左键按下消息的响应,读者可以像前面对框架类添加消息响应那样进行操作,但这里,再为读者介绍一种给类添加消息响应的方法,即利用ClssWizard工具来实现。 ClassWizard是Visual C++ 6.0中一个很重要的组成部分。它可以帮助我们创建一个新类,为己有类添加成员变量,添加消息和命令的响应函数,以及虚函数的重写。在 VC++开发环境界面中,打开【View】菜单,选择【ClassWizard】菜单命令,这时会弹出如图4.1所示的对话框。
图	4.1 MFC ClassWizard对话框 
可以看到, MFC Class Wizard对话框包括五个选项卡,分别是: Message Maps、 Member Variables、 Automation、 ActiveXEvents和ClassInfo选项卡。下面就分别介绍这五个选项卡。 
1. Message Maps选项卡 
Message Maps选项卡的界面如图4.1所示,可以通过此选项卡添加消息处理函数、成
员函数及新类,还可以删除成员函数,以及对成员函数进行编辑。该选项卡上各控件的含义及作用如下所述。 
. 	Project下拉列表框给出当前工程名称。实际上,对 VC++来说,一个工作区空间 
C.dsw)中可以包含多个工程C.dsp)。因此,如果工作区中有多个工程,可以在Project
下拉列表框选择当前需要处理的工程。 
. 	Class name下拉列表框显示当前工程中包含的类,用户可以选择任何存在于当前工
程中的类,为其添加消息处理函数等。 
. 	Object IDs列表框列出当前选择的类所包含的所有资源的ID号,包括菜单项、对
	话框控件等,列表中的第一项总是当前的类名。 
. 	Messages列表框列出对应于ObjectIDs框中所选中的当前项可处理的ID,以及针
对当前类可被重写的MFC虚函数。 


. 	Member functions列表框列出当前类包含的所有成员函数。其中,前面标注有 "V"
字符的是虚函数,标注 "W"字符的是Windows消息处理函数。 


. 	Add Class按钮允许用户在工程中添加一个新类。新类可以是自己创建的,也可以
从ActiveX库中选取。 


. 	Add Function按钮允许用户向 Member Functions列表框中添加一个新的消息处理
函数或重载基类的虚函数。 


. 	Delete Function按钮允许用户删除Member Functions列表框中所选中的函数。 

. 	Edit Code按钮打开编辑窗口,允许用户对Member Functions框中所选中的项进行
编辑。 
2. 	Member Variables选项卡
单击 MFC ClassWizard对话框上的 Member Variables标签,即可显示 Member Variables 选项卡,如图 4 .2所示。通过此选项卡,我们可以加入与对话框上的控件相关联的成员变量,以便程序利用这些成员变量与对话框上的控件进行信息交换。至于如何将变量与控件相关联,将在后面的章节中详细介绍,这里只对该选项卡上各控件的含义做简单介绍。
图 4.2 MFC ClassWi zard对话框之 Member Variables选项卡 

. 	Project下拉列表框与 Message Maps选项卡上的 Project下拉列表框含义相同,给出当前工程名称。 

. 	Class name下拉列表框与 Message Maps选项卡上的 Class name下拉列表框,显示当前工程中包含的类,用户可以从中选择当前要操作的类。 


. 	Control IDs 项显示对话框中所具有的控件的 E号; Ty pe项表示成员变量的类型: Member项表示成员变量的名字。 
. 	Add Class按钮允许用户在工程中添加一个新类。新类可以是自己创建的,也可以从 ActiveX库中选取。 
. 	Add Variable按钮用于给选定的控件添加成员变量。 

. 	Delete Variable按钮用于删除选定控件的成员变量。 

. 	Update Columns:当数据源中的表结构发生变化时,单击此按钮,即可更新相应的记录集类,以便与最新的表结构保持一致。 

. 	Bind All按钮用于把数据库内指定表中的字段与记录集类相应数据成员一一绑定。默认情况下, ClassWizard基于每个字段的名称确定记录类内相应的数据成员名称。 


3. 	Automation选项卡
单击 MFC ClassWizard对话框上的 Automation标签,即可显示 Automation选项卡,如图 4.3所示。此选项卡允许用户加入方法或属性,以增强程序的 Automation功能。 
. 	Project下拉列表框给出当前工程名称。
图 4.3 MFC ClassWizard对话框之 Automation选项卡 

. 	Class name下拉列表框显示当前工程中包含的类,用户可以选择任何存在于当前工程中的类,包括不支持 Automation的类。 

. 	Extemal names列表框列出己加到当前类中的方法及属性的外部名。这些名字供 Automation客户程序使用。 

. 	Implementation文本框显示 External names框中选中的方法及属性在 C++类中是怎样实现的: S表示固有属性, C表示自定义属性, M表示方法,粗体表示默认的属性。 

. 	Add Class按钮允许用户在工程中添加一个新类。新类可以是自己创建的,也可以从 ActiveX库中选取。 


. 	Add Method按钮用于给类添加新的 Automation方法。增加或删除方法时, Class Wizard自动更新映射表。此项只对支持 Automation的类有效。 
. 	Add Property按钮用于给类添加新的 Automation属性。增加或删除属性时, Class Wizard自动更新映射表,此项只对支持 Automation的类有效。 

. 	Delete按钮用于删除 Extem aJ names框中选定的方法或属性名。如果属性是用 GetJSet方式访问的,必须手工删除 .cpp文件里的 Get和 Set成员函数。 

. 	Edit Code按钮打开编辑窗口进行编辑。 


. 	Data Binding按钮用于指定 Automat.on控件支持的数据绑定层次。 
4. 	ActiveX Events选项卡
单击 MFC ClassWizard对话框上的 ActiveX Events标签,即可显示 ActiveX Events选项卡,如图 4.4所示。该选项卡允许用户加入事件以支持 ActiveX控件。 
. 	Project下拉列表框给出当前t程名称。 
. 	Class name下拉列表框显示当前工程中包含的类,用户可以选择任何存在于当前工程中的类,包括不支持 ActiveX的类。 

. 	ExtemaJ names列表框列出己加到当前类中的成员函数与成员变量名。这些名字供 Automation客户程序使用。


图 4.4 MFC ClassWizard对话框之ActiveX Events选项卡 

. Implementation文本框显示Extemal names框中选中的方法及属性在 C++类中的实
现: S表示固有属性,C表示自定义属性,M表示方法,粗体表示默认的属性。 


. 	Add Class按钮允许用户在工程中添加一个新类。新类可以是自己创建的,也可以从ActiveX库中选取。 

. 	AddEvent按钮允许用户加入Automation事件。该事件用于类与该类容器之间的通信。 


. 	Delete按钮用于删除选中的 Automation事件。 
5. 	Class Info选项卡
单击MFC ClassWizard对话框上的ClassInfo标签,即可显示ClassInfo选项卡,如图 
4.5所示。通过此选项卡,用户可以观察当前工程中类的有关信息。 
图4.5 MFC ClassWizard对话框之Class Info选项卡

106 I ~如' 
VCII:深λ详解 
. 	Project下拉列表框给出当前工程名称。 

. 	Class name下拉列表框显示当前工程中包含的类。用户可以选择当前需要处理的类。 

. 	File details显示当前类的文件及资源 ID号等信息。 

. 	Advanced options控件组包含下列信息: 

. 	Message filter下拉列表框,列出对当前选中的类有效的所有消息分类,这里是按照消息所属窗口或对话框类型进行分类的。 

. 	Foreign class下拉列表框的内容由当前选中类的类型决定。如果当前选中的类是对话框、有格式视图或记录集视图,那么此框列出所有与选中的类相关联的外部类名。在其他情况下,则显示为 None。 

. 	Foreign variable框列出与当前选中的类相关的所有外部变量。此选项一般用于数据库类。在编辑记录集视图时,可以选取相关的记录集,并可以输入一个新的变量名。 


. 	Add Class按钮用于添加新类。
现在我们利用 Class Wizard给工程 Draw的视类 CDrawView添加 WM LBUTTONDOWN消息响应函数,在 MFC ClassWizard对话框的 Message Maps选项卡上依次进行以下选择。 
. 	Project选项
选择工程名,因为本例的工作区中只有一个工程,即 Draw,所以直接选择这个工程即可。 
. Class name选项
选择 CDrawView类。 


. Object IDs选项因为我们现在是要对 CDrawView类添加消息响应函数,所以应该选择 CDrawView J页。 

. Messages选项拖动此选项的该动条,找到 WM_LBUTTONDOWN消息并选中。经过以上几步选择之后,单击 Add Function按钮, ClassWizard就会在 member functions 


列表框中添加一项,即 WM_LBUTTONDOWN消息的响应函数 OnLButtonDown,如图 4.6所示。
单击 Edit Code按钮,即可跳转到 CDrawView类的源文件中,并定位于 OnLButtonDown函数的定义处。与前面 CMainFrame类的处理一样,在此函数中添加一个显示消息框的函数,代码如例 4-2所示。
仔tl4-2 

void CDrawView: :OnLButtonDown(UINT nFlags , CPoint point) 
// TODO: Add your message handler code here and/or call default 
MessageBox("View Clicked!");
 CView: :OnLButtonDown(nFlags , point); 
" 

图 4.6新增的WM LBUTTONDOWN消息响应函数项 

Build并运行Draw程序,然后在程序窗U上单击鼠标左键,此时会弹出一个消息框(如图4.7所示〉。这就说明视类所代表的窗口被单击了。也就是说,视类捕获鼠标左键按下消息这一操作生效了。

图  4.7 B蜻在视类中捕获 WM_LBUTTONDOWN 旦消息时程序运行结果 

那么为什么前面在框架类中捕获这一消息就没有生效呢?在前面第 3章中讲述文档/视类结构时,曾说过视类窗口始终覆盖在框架类窗口之上。我们可以打个比方,框架窗口就像一面墙,而视类窗口就像墙纸,它始终挡在这面墙的前面。那么此时对这面墙的所有操作,其实都是在这面墙纸上进行的。同样的道理也适用于框架窗口和视窗口。也就是说,所有操作,包括鼠标单击、鼠标移动等操作都只能由视类窗口捕获。这就是为什么在框架类窗口中收不到鼠标左键单击这一消息的原因。
这时,我们可以删除框架类中已经添加的 WM一LBUTIONDOWN这一消息的响应函数。不过,读者应注意的是,通过MFC提供的向导添加消息响应函数后, ClassWizard会在所选类的头文件和源文件中添加几处相关的信息, 4. 1.2节将介绍通过向导添加的内容及其所在的位置。因此删除某个消息响应函数时要小心,一定要确保这几处相关代码均被删除。最好不要直接手工删除源代码中的函数定义。可以在ClassView选项卡上用鼠标右键单击要删除的函数名,在弹出的快捷菜单中选择【Delete】菜单命令,如图4.8所示。系统会提示用户是否确认此操作,当用户做出肯定应答后, VC++就会把头文件和源文件中所有与此函数相关的信息全部删除。
图4.8删除一个类成员函数的操作 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -