基本操作
主要内容:
Workspace(ClassView,ResoreceView,FileView)
菜单
App Wizard(应用程序向导)
Class Wizard(类向导)
标准控件
常用调试方法
VC的窗口分为三部分,正文窗口(右上角),工作窗口(左侧),输出窗口(下侧)。
工作窗口有三个标签,ClassView,ResoreceView,FileView;单击“+”,“—”打开文件夹;对没有打开的文件夹或文件,双击打开;对于打开的文件夹双击关闭。在ClassView中双击类名,
正文窗口显示类定义,双击类的成员变量查看定义,双击函数进入函数实现。对函数名右键,
有两个功能比较有实用价值:calls,called by.对类名进行右键,有两个功能十分有价值:
增加成员变量,增加成员函数。
常见菜单:
Edit->Advanced\Format Selection Alt+F8 对选中对象进行缩排
Edit->Advanced\Make Selection Uppercase Ctrl+Shift+U 把选中部分改成大写
Edit->Advanced\Make Selection Lowercase Ctrl+U 把选中部分改成小写
Edit最后的三个菜单没有多大实用价值,因为如果要查看一个类的成员,可以用ClassName::的形式看,自动会列出成员,你只需打个开头再空格(或其它非标识符字符)就可以了,自动会匹配第一个符合条件的成员。当你打完函数名,再打正括号时,就会显示有关信息,包括在函数定义同一行的注释。
View->ClassWizard Ctrl+w 编辑应用程序中的类
View->DebugWindow Ctrl+F10,运行到光标处,它的子项就可以使用了。
Debug菜单基本上都会使用,Set Active Configuration,设置Debug方式或Release方式。
#ifdef _DEBUG
#endif
这个宏定义之间的语句,在Release方式下不会被执行。
Tool->Customize->Toolbars定义工具条
AppWizard有几步,只有第一,第二,最后一步比较重要。
第一步选择:MFC A ppWizard(exe);
第二步:Single document单文档
Multiple document多文档
Dialog basede 基于对话框
最后一步(基于对话框没有):
Base Class:
选择视图类的基类,各基类差别比较明显,大家试一下就行了。应用程序向导会自动生成应用程序类,文档模块类,框架类,文档类,视图类。简单程序绝大部分处理都在视图类。当数据较复杂时,会用到文档类。
Ctrl+W打开ClassWizard
该对话框包含以下选项卡。
1, Message Maps选项卡:管理消息和成员函数之间的连接。
2, Member Variables选项卡:使用户加入或删除成员变量(与控件关联的)。
3, Automation选项卡:提供各种特性来支持Automation,使用户方便地增删Automation的属性和方法。
4, Active Events选项卡:提供各种特性来支持ActiveX,使用户方便地增删属性和响应函数。
5, Class Info选项卡:显示类的信息,允许用户创建新类,以便支持对话框和有格式的视图。
Message Maps
1 Projcect 工程,一般不必修改,因为一般只有一个。
2,Class name 类名
3,Object IDs列出了当前所选中对象的ID号,包括能产生消息的菜单项,对话框控件等。
4,message列出了Object IDs框中所选中的当前项可处理的消息及可以被重写的MFC函数。双击消息相当于AddFunction.
5,Member functions列表框列出了Class name框当前类包含的所有成员函数。标注V的是虚函数,标注W的是Windows消息。
Member Variables选项卡:
双击ID,弹出增加成员变量对话框:
Category有两种选择,值,控制,每个控件可以和一个值类型数据相关联,同时还可以和一个控制类型数据相关联。
当你编辑一个对话框时,会多一个工具条,上面有许多标准控件。如果你不小心把它关掉了,在标准工具条附近的空白处右键,如菜单右边,将Controls勾上。将一个控件加到对话框有两种方法:
1, 直接拖到对话框上。
2, 单击一个控件,然后在对话框上画。
调试的最常用的三种方法,假如我们怀疑一个整形变量x有问题的话,可以:
1, CString str;
str.Format(“%d”,x);//和printf非常相似
MessageBox(str);
优点:点确定后程序才会继续运行。
缺点:如果次数太多,过于浪费时间和键盘。
2,Ctrl+F10运行到光标处,在Watch窗口中name项输入x,,后面会显示值。
优点:简单,可以查看所有的值。
缺点:无法看到第二次运行到此处的情况。
3, #ifdef _DEBUG
afxDump<<x;
#endif
将结果显示在OutPut,不能在Release状态下。Ctrl+F5似乎无效,F5可以。
afxDump.SetDepth(1);
设置深度,如maps,arrays,它只打出有几个可元素,我们用上面的这个函数,它会将所有的内容打出来.
#ifdef _DEBUG
char test[] = "0123456789\n";
afxDump.HexDump( "--", (BYTE*) test, 11, 6 );
#endif
结果为:
-- 30 31 32 33 34 35
-- 36 37 38 39 0A
第一个参数,行首的打头字符.
第二个参数,要打的内容.
第三个参数,要打的元素个数.
第四个参数,每行的个数.
4,TRACE(...), TRACE0, TRACE1, TRACE2, TRACE3 也只能在调试时用注意打字符串时有长度限制,包括结束符在内,不超过512个字符.
5.在Debug状态下
F9设置断点后,F5到下一个断点,F10下一行,F11进入函数(包括系统函数)内部,Shift + F11出来.
F5后,Debug菜单有相应的菜单项.
F5后,View->Debug Window的子菜单项比较有用.
Watch 查看你指定的变量
variables 显示auot变量,local变量,this的值
memory 显示指定内存地址存储的值
call stack 显示函数调用关系
registers 寄存器的值
Disabblemble 汇编代码
其实Release下也可调试F5
Alt + f7 工程设置
c\c++ Generate Browse info 选上.
Debug info 选 Progame database for edit and continue
Link Generate debug info 选上
Link incrementally 选上