《MFC读书笔记》

     今天终于将《深入浅出MFC》(侯俊杰)这本书大体看了一遍(其实一直想看的,只是速度实在太慢),对这本有了一个了解。我认为这是本好书,虽然现在vc的开发环境已经出到visual studio 2010版本了,比该书使用的编译环境vc4.0版本有了太多的改变,但是这本书仍是我们了解MFC原理和机制的好书,虽然它已经有十多年的历史了。

一、win32编程方面的知识

介绍windows程序编程的基本的原理。WinMain函数是windows程序的入口函数,是程序的入口点。

1、窗口的注册和诞生:

  1)、RegisterClass注册窗口类,设定窗口类的属性(被封装在InitApplication中)。使用了大型数据结构WNDCLASS  作为函数的参数。

  2)、CreateWindow产生窗口(封装在InitialInstance中) 。

  3)、进入消息循环:

  TanslateMessage(&msg)

  DispatchMessage(&msg) 

  Message Map(消息映射)是消息的路径的查找地 

  4)、ShowWindow显示窗口

  5)、UpdateWindow更行窗口(WM_PAINT) 

2、空闲时间处理OnIdle 

  系统中没有任何等待处理的消息的时间。

3.console程序

  是Win32程序,和Dos程序想区别。

4、进程和线程(process and thread) 

  进程控制程序的优先级,而线程才是cpu调度的基本单位。这一部分和本书后面MFC多线程程序设计练习在一起。

 

二、c++重要性质

1、类及其成员 重要性质:封装(encapsulation)

2、基类和派生类 重要性质:继承(Inheritance)

3、虚函数和多态(polymorphism)

4、构造函数和析构函数

5、运行时类型识别(RTTI) 

6、动态创建(Dynamic Creation)

7、Template 

由于c++方面的知识很基础,就不在累述。其中virtual function、RTTI、Dynamic Creation、Template后面经常用到,是非常重要的性质,也比较难掌握。

 

三、MFC程序的仿真

 MFC数个重要的类层次关系图:

 

1、MFC程序的初始化过程:

 pApp->InitApplication();

pApp->InitInstance();

pApp->Run();

2、RTTI(运行时类型识别)

 类别型录网:CRuntimeClass

DECLARE_DYNAMIC/IMPLEMENT_DYNAMIC宏

DECLARE_DYNAMIC宏定义为: 

#define DECLARE_DYNAMIC(class_name)\

public:

  static CRuntimeClass class##class_name;\

  virtual CRuntimeClass* GetRuntimeClass() const;

 IMPLEMENT_DYNAMIC宏:

#define IMPLEMENT_DYNAMIC(class_name,base_class_name) \

    _IMPLEMENT_RUNTIMECLASS(class_name,base_class_name,0xFFFF,NULL)

 3、IsKindOf(类型识别)

 函数利用GetRuntimeClass取得&CView::classCView,然后在循线而上。

 4、Dynamic Createion(动态创建)

 DECLARE_DYNCREATE/IMPLEMENT_DYNCREATE宏

 #define DECLARE_DYNCREATE(class_name)\

    DECLARE_DYNAMIC(class_name)\

    static CObject* PASCAL CreateObject();

 

#define IMPLEMENT_DYNCREATE(class_name,base_class_name)\

    CObject* PASCAL class_name::CreateObject()\

     _IMPLEMENT_RUNTIMECLASS(class_name,base_class_name,0xFFFF,\

      class_name:CreateObject) 

构造的类别型录网:

 

5、serialize(数据读写)

每个可写到文件或可从文件读出的类,都有自己的serailize函数,负责他自己的数据读写文件操作。

应该改写<<和>>运算符,将数据流到archive中。

使用了DECLARE_SERIAL/IMPLEMENT_SERIAL宏实现(这里,我们可以看到,一般的宏都是使用DECLARE_XX来定义宏,使用IMPLEMENT_XX来实现宏)。 

archive是一个与文件息息相关的缓冲区 。

 6、Messae Maping(消息映射)

使用了宏来定义了一个巨大的建构,可以人为是一个巨大的数据结构体。

定义AFX_MSGMAP、AFX_MSGMAP_ENTRY数据结构和AFX_PMSG函数指针

定义了DELARE_MESSAGE_MAP宏 声明了一个数据结构

这个数据结构的填充由三个宏完成:BEGIN_MESSAGE_MAP、ON_COMMAND、 END_MESSAGE_MAP。

 7、Command Routing(命令传递)

全局函数AfxWndProc是命令传递的推动引擎的起始点。

 

四、Visual C++集成开发环境

 介绍vc IDE方面的一些知识,略过。

五、总观Application Framework

介绍Application Framework的相关知识和MFC方面的一些知识:MFC的一些类、Afx全局函数、MFC宏(macros)、MFC数据类型等。

六、MFC程序的生死因果

 介绍MFC的内部结构和程序的内部实现

 参考第一章(C/SDK),查看MFC程序的来龙去脉。

   1)、CWinApp-取代WinMain地位

  2)、 CFrameWnd-取代WndProc的地位

   3)、Application object

   4)、AfxWinInit-AFX内部初始化操作

   5)、CWinApp::InitApplication

  6)、CMyWinApp::InitInstance

   7)、CFrameWnd::Create产生窗口

CWinApp::Run 

Message Map将消息和处理函数连接在一起

本书详细的介绍了MFC程序的诞生、运行和死亡。 

 七、MFC骨干程序

Document/View构架

Document Template

八、Document-View深入探讨

CDocTemplate 管理 CDocument/CView/CFrameWnd

Serialize

九、消息映射和命令传递

这里是对前面内容的深化和拓展,不在雷总。

十、MFC于对话框 

主要介绍使用classWizard来创建对话框,流过。

十一 、View功能的加强和重绘

介绍关于View方面的一些操作,很常用。

1、UpdateAllViews和OnUpdate

2、View中hint的使用

3、窗口滚动:CScrollView

4、拆分窗口:Splitter

动态拆分:CSplitterWnd类的Create函数

十二、打印与预览

介绍程序的打印和预览功能的设计。

十三、多重文件和多重视图

MDI、SDI

动态拆分窗口

静态拆分窗口:CSplitterWnd类的CreateStatic函数

十四、MFC多线程程序设计

介绍进程和线程的含义和这方面和一些知识。

 十五、定制一个AppWizard

AppWizard的使用。

十六、ActiveX Controls的使用

有待深入。 

posted on 2009-12-09 14:21  Rochen  阅读(1149)  评论(0编辑  收藏  举报

导航