深入浅出MFC——Document-View深入探讨(五)
1. MFC之所以为Application Framework,最重要的一个特征就是它能够将管理数据的程序代码和负责数据显示的程序代码分离开来,这种能力由MFC的Document/View提供。Document/View是MFC的基石,了解它,对于有效运用MFC有极关键的影响。甚至OLE复合文件(compound document)都是建筑在Document/View的基础之上。
2. Document:
3. View:
注:在MFC里头,一旦WM_PAINT发生,Framework会自动调用OnDraw函数。View事实上是个没有边框的窗口。真正出现时,其外围还有一个有边框的窗口,我们称之为Frame窗口(也即 Document Frame(View Frame))。
4. Document Template: MFC把Document/View/Frame视为三位一体。
5. CDocTemplate管理CDocument/CView/CFrameWnd,图示如下:
7. MFC程序代码:
(1):
(2):
(3):Document Frame窗口产生之际,由于WM_CREATE引发CRrameWnd::OnCreate被唤起:
8. CDocTemplate、CDocument、CView、CFrameWnd之间的关系:
9. Document数据结构设计——MFC Collection Classes的选用:
(1):
(2):
10. Template-Based Classes:
(1):
(2):
(3):
11. 了解了Collection Classes中各类的特性以及所谓template/non-template版本之后,本例的数据结构可设计为图示如下:
12. View——数据重绘与编辑:View有两个最重要的任务,一是负责数据的显示,另一是负责数据的编辑。
13. Serialize:对象的文件读写。
(1)台面上的Serialize操作:以《深入浅出MFC》图8-3为例,图示如下:
(2)台面下的Serialize写文件奥秘:
(3)台面下的Serialize读文件奥秘:
14. DYNAMIC/DYNCREATE/SERIAL三宏。
(1):
(2):
(3):
(4):
15. Serializable的必要条件:
16. CArchive类:谈到Serialize就不能不谈CArchive,因为Serialize的对象(无论读或写)是一个CArchive对象。CArchive针对许多C++数据类型、Windows数据类型以及CObject派生类,定义operator<< 和 operator>>重载运算符:
(1):
(2):
17. Document与View交流: