按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
#0041 {
#0042 ar m_center;
#0048 ar 》》 m_radius;
#0049 }
#0050 }
接下来我应该改变使用者接口,加上菜单或工具栏,以便在涂鸦过程中得随时加上一个
四方形或一个圆圈。但我刚才说了,我只是打算做个小小的文件档格式测试而已,所以
简单化是我的最高指导原则。我打算搭现有之使用者接口的便车,也就是每次鼠标左键
按下开始一条线条之后,再new 一个四方形和一个圆形,并和线条一起加入CObList 之
中,然后才开始接受左键的坐标。。。。
所以,我修改CScribDoc::NewStroke 函数如下:
#0001 CStroke* CScribDoc::NewStroke()
#0002 {
#0003 CStroke* pStrokeItem = new CStroke(m_nPenWidth);
#0004 CRectangle* pRectItem = new CRectangle(CRect(0x11;0x22;0x33;0x44));
#0005 CCircle* pCircleItem = new CCircle(CPoint(0x55;0x66);0x77);
#0006 m_strokeList。AddTail(pStrokeItem);
#0007 m_strokeList。AddTail(pRectItem);
#0008 m_strokeList。AddTail(pCircleItem);
#0009
#0010 SetModifiedFlag(); // Mark the document as having been modified;
#0011 // for purposes of confirming File Close。
#0012 return pStrokeItem;
#0013 }
并将scribbledoc。h 中的m_strokeList 修改为:
CTypedPtrList m_strokeList;
重新编译联结,获得结果如图8…10a 。图8…10b 对此结果有详细的剖析。
540
…………………………………………………………Page 603……………………………………………………………
第8章 Document…View 深入探討
每画上一条线条,就自动附
加一个矩形和一个圆形。本
例并没有另外设计UI,纯为
CArchive::WriteObject 实验用途。
CArchive::ReadObject
06 00 FF FF
000000: 01 00 07 00 43 53 74 72 6F 6B 65 02 。。。。。。。。CStroke。
000010: 00 02 00 6E 00 00 00 24 00 00 00 6E 00 00 00 24 。。。n。。。。。。n。。。
000020: 00 00 00 FF FF 01 00 0A 00 43 52 65 63 74 61 6E 。。。。。。。。。CRectan
000030: 67 6C 65 11 00 00 00 22 00 00 00 33 00 00 00 44 gle。。。。〃。。。3。。。D
000040: 00 00 00 FF FF 01 00 07 00 43 43 69 72 63 6C 65 。。。。。。。。。CCircle
000050: 55 00 00 00 66 00 00 00 77 00 00 00 01 80 02 00 U。。。f。。。w。。。。。。。
000060: 02 00 6E 00 00 00 55 00 00 00 6E 00 00 00 55 00 。。n。。。U。。。n。。。U。
000070: 00 00 03 80 11 00 00 00 22 00 00 00 33 00 00 00 。。。。。。。。〃。。。3。。。
000080: 44 00 00 00 05 80 55 00 00 00 66 00 00 00 77 00 D。。。。。U。。。f。。。w。
000090: 00 00 。。
图8…10a TEST。SCB 文件内容,文件全长146 个字节。
CObList m_graphList
CObList m_graphList
每次鼠标左键按下,开始一条线条,图8…10a 中的程序立刻new 一个四方形和一个圆
形,并和线条一起加入CObList 之中,然后才开始接受左键的坐标。所以图8…10a 的
执行画面造成本图的数据结构。
541
…………………………………………………………Page 604……………………………………………………………
第篇 深入 MFC 程式設計
数值(hex) 说明
0006 表示此文件有六个CObList 元素
FFFF FFFF 亦即…1,表示New Class Tag
0001 这是Schema no。,代表资料的版本号码
0007 表示后面接着的「类别名称」有7 个字符
43 53 74 72 6F 6B 65 〃CStroke〃 (类别名称)的ASCII 码
0002 第一条线条的宽度
0002 第一条线条的点数组大小(点数)
00000066;0000001B 第一条线条的第一个点坐标
00000066;0000001B 第一条线条的第二个点坐标
FFFF FFFF 亦即…1,表示New Class Tag
0001 这是Schema no。,代表资料的版本号码。
000A 后面接着的「类别名称」有Ah 个字符。
43 52 65 63 74 61 6E 67 6C 65 〃CRectangle〃 (类别名称)的ASCII 码。
00000011 第一个四方形的左
00000022 第一个四方形的上
00000033 第一个四方形的右
00000044 第一个四方形的下
FFFF FFFF 亦即…1,表示New Class Tag
0001 这是Schema no。,代表资料的版本号码。
0007 后面接着的「类别名称」有7 个字符。
43 43 69 72 63 6C 65 〃CCircle〃 (类别名称)的ASCII 码。
00000055 第一个圆形的中心点X 坐标
00000066 第一个圆形的中心点Y 坐标
00000077 第一个圆形的半径
8001 这是(wOldClassTag | nClassIndex) 的组合结果,表示接
下来的对象使用索引为 的旧类别。
1
0002 第二条线条的宽度
0002 第二条线条的点数组大小(点数)
542
…………………………………………………………Page 605……………………………………………………………
第8章 Document…View 深入探討
数值(hex) 说明
00000066;00000031 第二条线条的第一个点坐标
00000066;00000031 第二条线条的第二个点坐标
8003 这是(wOldClassTag | nClassIndex) 的组合结果,表示接
下来的对象使用索引为3 的旧类别。
00000011 第二个四方形的左
00000022 第二个四方形的上
00000033 第二个四方形的右
00000044 第二个四方形的下
8005 这是(wOldClassTag | nClassIndex) 的组合结果,表示接
下来的对象使用索引为 的旧类别。
5
00000055 第二个圆形的中心点X 坐标
00000066 第二个圆形的中心点Y 坐标
00000077