这篇文章我们来完成菜单设计和工具栏设计
菜单设计
1.点开资源视图==>Menu==>IDR_MAINFRAME
通过IDR_MAINFRAME我们可以编辑该资源定义,包括主菜单、其他菜单、工具栏等内容,IDR_MAINFRAME即为默认的主窗口的资源标识符
2.右键相应菜单==>新插入,依次插入画直线、画矩形、画椭圆、测试菜单、画笔
3.右键新插入的菜单,添加事件处理程序,类列表可选Cmainframe,CMFCpaintview, CMFCpaintdoc, CMFCpaintapp, 消息类型全选择COMMAND,我们在这四个类列表全部添加一个处理程序,并且每个程序添加如下代码
TRACE("%s(%d):%s\r\n", __FILE__, __LINE__, __FUNCTION__);
FILE表示文件路径,LINE表示行数,FUNCTION表示函数名
4.运行后发现,点击MFC窗口的相应菜单,即使生成了四个事件处理程序,但是只会输出一个TREACE,即只会运行一个处理程序,一个个调试后,可以得到以下结论
响应菜单命令顺序:view>doc>框架>app,
也就是说假如同时给新插入的菜单,添加CMFCpaintview, CMFCpaintdoc类列表,只有view列表才会响应鼠标对菜单的点击。即点一下新插入的菜单,只会有一个程序响应
工具栏设计
1.选择资源视图,选择TOOLBAR,选择IDR_MAINFRAME和IDR_MAINFRAME_256,一个是旧版一个是新版,
2.在VS工具栏里选择,画笔、
然后在这里面画上几条直线
这样在工具栏就有了这样的图标
Cobject
Cobject是MFC所有类的父类,顶级父类,它提供一些公共服务
1.支持序列化
什么是序列化?比如一个类中有两个整型成员变量,X和Y,序列化就是将XY变成一行数据,即8字节的数据,或者把XY打印为某种固定格式文本,X :值,Y : 值,或者把类的内存全部复制过来,为什么要序列化,如果变成一行数据,就能够有格式的传输,因为有些协议只能一个一个i字节的传输,也可以进行网络数据传输,比如JSON格式
2.支持运行时提供类信息
提供类的父类信息及子类信息,方便进行调试,打印类的更多信息,如getbaseclass函数和get-thisclass函数
3.支持动态创建及类的诊断输出
什么是动态创建,比如一个说明窗口,我们没有点开说明,它就不会创建这个窗口,直到我们自己点开它,即动态创建,根据用户需求来进行创建,类的诊断输出是一种调试工具,如ASSERT-VALID函数,dump函数