zoukankan      html  css  js  c++  java
  • MFC(二)

    1.      MFC提供了文档与视图,以及各个框架窗口与当前视图相结合的机制。文档对象自动维护着指向相关视图的指针列表,而视图对象拥有存储相关文档对象指针的数据成员,各个框架窗口都维护着指向当前视图的指针。

    文档,视图,框架窗口之间的协作,是一个名为文档模板的MFC类对象安排的。

    2.      MFC有两个用来定义文档模板的类。

    SDI CSingleDocTemplate

    MDI  (CMultiDocTemplate)

    3.      几个重要的基类

    应用程序类 CXXAPP

    框架类   CXXWnd

    视图类    CxxView(用于如何在CxxWnd对象创建的窗口上显示CxxDoc对象的数据)

    文档类  CxxDoc

     

    4.      消息类别

    程序要处理的消息有3种。

    Windows消息:WM_前缀的标准windows消息,WM_COMMAND除外。

    控制通知消息:WM_COMMAND消息。

    命令消息:WM_COMMAND消息。

    Windows消息和控制通知消息,必有派生于CWnd类的对象处理。

    所有命令消息都将发送当应用程序的主框架窗口,然后主框架窗口按照一定的顺序进行安排处理。

    SDI:视图对象,文档对象,文档模板对象,主框架窗口对象,应用程序对象。

    MDI(通用情况):活动的视图对象,与活动视图关联的文档对象,活动文档的文档模板对象,与活动视图管理的框架窗口对象,主框架窗口对象,应用程序对象。

    与Windows进行通信。MFC中的消息处理。

    MFC支持提供函数来处理感兴趣的各个消息,这些函数称为消息处理程序。由于我们的应用程序是基于MFC的,所以消息处理程序始终是应用程序的一个类的成员函数。

    对于特定消息和程序中为他提供服务的函数来说,他们的关联是由消息映射建立的。类的消息映射是处理Windows消息的成员函数表,在出现给定的消息时,将调用对应的函数。只有与一个类有关 的消息才能出现在该类的消息映射中。

    在代码中,消息的映射开始由BEGIN_MESSAGE_MAP()宏表示,消息映射的结束由END_MESSAGE_MAP()宏表示。

    包括在消息映射中的函数也需要在类的定义中声明,不过这些函数是利用一种特殊的方式进行标示的。(类定义中)

    例如:afx_msg void OnAppAbout();
    afx_msg声明函数OnAppAbout(),这个单词只是用于区分消息处理函数和类中其他成员函数。在编译时不会产生影响,预处理器会把它转换成空白。

    DECLARE_MESSAGE_MAP()宏表明这个类包含了作为消息处理程序的函数成员。由于任何派生于CCmdTarget的类都有可能有消息处理程序,所以通过Application Wizard或Add Class Wizard 创建的类都会把DECLARE_MESSAGE_MAP()宏作为类定义的一部分包括进来。

    在包括宏DECALRE_MESSAGE_MAP()的类定义中,类实现必须包括宏BEGIN_MESSAGE_MAP()和宏END_MESSAGE_MAP().

    BEGIN_MESSAGE_MAP(CSketcherApp, CWinAppEx)

        // 标准打印设置命令

        ON_COMMAND(ID_FILE_PRINT_SETUP, &CWinAppEx::OnFilePrintSetup)

    END_MESSAGE_MAP()

    BEGIN_MESSAGE_MAP()宏有两个参数,一个是定义消息映射的当前类名,一个是其基类名。如果在定义消息映射的类中没有发现处理程序,那么将搜索基类的消息映射。

    程序可能要处理的消息有3种:Windows消息,控制通知消息,命令消息。

    放置处理程序的许可位置取决于要处理消息的类别。Windows消息和控制通知消息始终由派生于CWnd类的对象处理。而应用程序类,文档类和文档模板类不是派生于CWnd的,所以他们不能处理这些消息。

    关于命令消息的处理。

    所有命令消息都将发送到应用程序的主框架窗口,然后主框架窗口按照一个特定的顺序把这个消息传送给程序的类。
    SDI程序处理命令消息的顺序是:视图对象,文档对象,文档模板对象,主框架窗口对象,应用程序对象。
    MDI程序处理命令消息的顺序是:活动视图对象,与活动视图相关联的文档对象,活动文档的文档模板对象,活动视图的框架窗口对象,主框架窗口对象,应用程序对象。

  • 相关阅读:
    java ,js获取web工程路径
    js 无刷新分页代码
    js 获取时间对象代码
    jquery 文本框失去焦点显示提示信息&&单击置空文本框
    CodeForces
    nth_element() O(n)复杂度求第k+1小元素
    CodeForces
    HDU
    杜教BM
    J
  • 原文地址:https://www.cnblogs.com/hometown/p/3204241.html
Copyright © 2011-2022 走看看