第一章 2. CPaintDC 和 消息映射机制

来源:互联网 发布:大连网络咨询男科 编辑:程序博客网 时间:2024/05/17 06:56

在Hello程序中,WM_PAINT消息由CMainWindow::OnPaint 来处理。

CPaintDC类是从CDC类派生的,CDC类封装了Window设备环境,以及包含了绘制到屏幕、打印机和其他设备的几十个成员函数。

在Window中,所有的图形输出都通过设备环境对象执行,

CPaintDC 只在 WM_PAINT消息处理程序中使用,它是CDC的一个特殊例子。

在API 中绘图实例:

HDC hdc;PAINTSTRUCT ps;hdc =  BeginPaint(hwnd, &ps);Ellipse(0,0,100,100);EndPaint(hwnd,&ps);

在面向对象思想 CPaintDC 中,我们可以使用构造函数调用::BeginPaint 和从其析造函数调用::EndPaint

也可以在new实例化一个CPaintDC 对象

消息映射

来自Window的WM_PAINT消息是如何转换为一个对CMainWindow::OnPaint的调用呢? 这里就使用了,消息映射

消息映射是一个将消息和成员函数相互关联的表。

当框架窗口接收到了一个消息,MFC将搜索该窗口的消息映射,如果存在一个处理WM_PAINT消息的处理程序,然后就调用OnPaint。

MFC为执行消息映射在内部所做的工作隐藏在某些十分复杂的宏当中,但“使用”消息映射还是相当简单的。

下面将是消息映射添加到一个类中需要做的全部工作:

1、通过将 DECLARE_MESSAGE_MAP 语句添加到类声明中,声明消息映射。

2、通过放置标识消息的宏来执行消息映射,相当的类将在对BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 的调用之间消息。

3、添加成员函数来处理消息。

MFC的消息映射机制的作用相当于,它是将消息连接到消息处理程序而不使用虚拟函数的一种非常有效的方式。

MFC中的消息机制其实质是一张巨大的消息及其处理函数的一一对应表,然后加上分析处理这张表的应用框架内部的一些程序代码.这样就可以避免在SDK编程中用到的繁琐的CASE语句

具体的消息处理过程序以后慢慢深入学习

0 0
原创粉丝点击