MFC界面编程基础(03):消息映射、窗口绘制、文档/视图结构体系

上一篇:MFC界面编程基础(02):MFC窗口的创建下一篇:MFC界面编程基础(04):Windows字符集

消息映射

消息映射是一个将消息和成员函数相互关联的表。比如,框架窗口接收到一个窗口绘制消息,MFC将搜索该窗口的消息映射,如果存在一个处理WM_PAINT消息的处理程序,然后就调用OnPaint。MFC为执行消息映射在内部所做的工作隐藏在某些十分复杂的宏当中,但使用消息映射是相当简单的。下面是是将消息映射添加到一个类中所做的全部工作:

  • 通过将DECLARE_MESSAGE_MAP添加到类声明中,声明消息映射。
    在这里插入图片描述
  • 通过放置标识消息的宏来执行消息映射,相应的类将在对BEGIN_MESSAGE_MAP和END_MESSAGE_MAP的调用之间处理消息。
    在这里插入图片描述
  • 添加成员函数来处理消息
    在这里插入图片描述

窗口绘制

我们的程序如果想要随心所欲的在屏幕上进行绘制,必须响应来自windows的WM_PAINT消息,此消息通知它该更新窗口了。
WM_PAINT消息的发生可能有多重原因:由于移动了窗口;由于窗口原先被覆盖的部分显露了出来;或者由于窗口大小改变了等等。不论诱因是什么,都需要由应用程序来负责通过响应WM_PAINT消息绘制其窗口的客户区。由Windows来绘制非客户区,这样所有的应用程序将具有一致的外观。如果应用程序不为客户区执行其自身的绘制例程,窗口的内部将是一片空白。
在我们的上面的示例程序中,WM_PAINT消息是由CMainWindow::OnPaint来处理的,当一个WM_PAINT消息抵达时都将调用它。OnPaint的绘制是通过构造一个名为dc的CPaintDC对象开始的:

CPaintDC dc(this);
MFC的CPaintDC类是从CDC类派生出来的。CDC类封装了Windows设备环境,以及包含了绘制屏幕、打印机和其他设备的几十个成员函数。CPaintDC只在WM_PAINT消息处理程序中使用,它是CDC的一个特殊的例子。如果想在屏幕上进行绘制,就必须在OnPaint程序内使用CPaintDC对象。

文档/视图结构体系

MFC应用程序框架结构的基石是文档/视图体系结构,它定义了一种程序结构,这种结构依靠文档对象保存应用程序的数据,并依靠视图对象控制视图中显示的数据,把数据本身与它的显示分离开。数据的存储和加载由文档类来完成,数据的显示和修改则由视类来完成。 MFC在类CDocument和CView中为稳定视图提供了基础结构。CWinApp、CFrameWnd和其他类与CDocument和CView合作,把所有的片段连在了一起。

当然我们可以不使用文档/视图来编写MFC程序,但是想要从框架结构中获得最大的好处并利用MFC的某些高级特性就必须使用文档/视图体系结构。此处的文档是对程序数据的抽象表示,不能理解为其只对文字或电子表格程序有用。

CView类也派生与CWnd类,框架窗口是视图窗口的一个父窗口。主框架窗口(CFrameWnd)是整个应用程序外框所包括的部分,即图中粗框以内的内容,而视类窗口只是主框架中空白的地方。
在这里插入图片描述

上一篇:MFC界面编程基础(02):MFC窗口的创建下一篇:MFC界面编程基础(04):Windows字符集