MFC中消息映射的实现

知识是从一本书上看到并总结的,书名:MFC Windows程序设计(第2版)。[美]Jeff Prosise著 北京博彦科技发展有限责任公司 译

对于捕获窗口事件并添加事件处理函数的过程可以有以下两种方式的实现(以鼠标单击事件为例):

1、

  H文件添加:

protected:
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()

  CPP文件添加:

BEGIN_MESSAGE_MAP(子类名, 基类名)
   ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
.
.
.
void 子类名::OnLButtonDown(UINT nFlags, CPoint point)
{
.
.
.
}

2、

  H文件添加:

protected:
afx_msg LRESULT OnLButtonDown(WPARAM wParam,LPARAM lParam);
DECLARE_MESSAGE_MAP()

  CPP文件添加

BEGIN_MESSAGE_MAP(子类名, 基类名)
   ON_MESSAGE(WM_LBUTTONDOWN, OnLButtonDown)
END_MESSAGE_MAP()
.
.
.
LRESULT 子类名::OnLButtonDown(WPARAM wParam,LPARAM lParam)
{
.
.
.
}

两者实现的效果是一样的。但是属于不同的方法。其中第二种方法也可以运用到自定义消息的添加过程中去。

时间: 2024-10-15 19:09:27

MFC中消息映射的实现的相关文章

MFC中消息响应机制

由于视类窗口始终覆盖在框架类窗口之上,因此所有操作,包括鼠标单击.鼠标移动等操作都只能由视类窗口捕获.一个MFC消息响应函数在程序中有三处相关信息:函数原型.函数实现和以及用来关联消息和消息响应函数的宏. (1)在消息响应函数的原型代码中,函数声明的前部有一个afx_msg限定符,也是一个宏,该宏表明这个函数是一个消息响应函数的声明. (2)消息映射宏:在视图类的源文件中,BEGIN_MESSAGE_MAP()和 END_MASSAGE_MAP()这两个宏之间定义了消息映射表,例如对于画线,其中

MFC消息映射的原理:笔记

多态的实现机制有两种,一是通过查找绝对位置表,二是查找名称表:两者各有优缺点,那么为什么mfc的消息映射采用了第二种方法,而不是c++使用的第一种呢?因为在mfc的gui类库是一个庞大的继承体系,而里面的每个类有很多成员函数(只说消息反映相关的成员函数啊),而且在派生类中,需要改写的也比较少(我用来做练习的程序就是那么一两个,呵呵).那么用c++的虚函数的实现机制会导致什么问题呢?就是大量虚表的建立使得空间浪费掉很多. 嗯-怎么办呢?于是各大c++名库(比如QT,MFC,VCL-)在消息映射的实

MFC编程入门之五(MFC消息映射机制概述)

在MFC软件开发中,界面操作或者线程之间通信都会经常用到消息,通过对消息的处理实现相应的操作.比较典型的过程是,用户操作窗口,然后有消息产生,送给窗口的消息处理函数处理,对用户的操作做出响应. 一.什么是消息?  窗口消息一般由三个部分组成:1.一个无符号整数,是消息值:2.消息附带的WPARAM类型的参数:3.消息附带的LPARAM类型的参数.其实,我们一般所说的消息是侠义上的消息值,也就是一个无符号整数,经常被定义为宏. 二.什么是消息映射机制?  MFC使用一种消息映射机制来处理消息,在应

VS2010/MFC编程入门之五(MFC消息映射机制概述)

VS2010/MFC编程入门之五(MFC消息映射机制概述)-软件开发-鸡啄米 http://www.jizhuomi.com/software/147.html     上一讲鸡啄米为大家简单分析了MFC应用程序框架,这一讲是关于MFC消息映射机制的内容.        前面已经说过,Windows应用程序是消息驱动的.在MFC软件开发中,界面操作或者线程之间通信都会经常用到消息,通过对消息的处理实现相应的操作.比较典型的过程是,用户操作窗口,然后有消息产生,送给窗口的消息处理函数处理,对用户的

MFC消息映射与命令传递

题外话:刚开始学视窗程序设计的时候,我就打印了一本Windows消息详解,里面列举了各种已定义消息的意义和作用,共10多页,在编程的时候翻翻,有时觉得很受用.我发觉很多编程的朋友,虽然每天都面对消息,却很少关注它.C++程序员有一个通病,很想写“自己”的程序,即每一行代码都想自己写出来.如果用了一些库,总希望能完全理解库里的类或函数是怎么一回事,否则就“不踏实”.对于消息,许多朋友只关心常用的几个,对其余的漠不关心.其实,Windows中有很多不常用的消息却很有用,程序员可能通过响应这些消息实现

MFC-消息分派

前言 由于工作需要,这几天学了一点MFC,在AFX里看到很多熟悉的东西,如类型信息,序列化,窗口封装和消息分派.几乎每个界面库都必须提供这些基础服务,但提供的手法却千差万别.MFC大量地借用了宏,映射表来实现,而VCL则更多的在语言级别上给与支持.这其实是很容易理解的,因为C++是一个标准,不会因某个应用而随便扩展语言:相反Delphi完全由一个公司掌握,因此每支持一项新技术,变化最大的往往是语言本身. 学习MFC的代码,再对照VCL的实现,这真是一个很有意思的过程,其中可以看到两个框架在一些设

MFC的运行机制 以及 MFC中的DC、CDC、HDC、句柄、设备上下文 [转]

在MFC程序中,我们并不经常直接调用Windows API,而是从MFC类创建对象并调用属于这些对象的成员函数.也就是说MFC封装了Windows API.你说你喜欢C++而MFC换一种说法就是一个用C++写的一个函数库 然后你来调用 只不过这个类不是你写的 MFC提供数百个类,最重要的.也是编写任何VC++应用程序都必不可少的两个类CWinApp和CFrameWnd,这两个类是编写复杂庞大应用程序的基石. 1>封装特性:构成MFC框架的是MFC类库而MFC类库又是C++的一个类库.这些类封装W

消息映射(C++)(转)

摘要:控件通知消息有很多种,但是有一种是很常用,但是又不是很容易掌握的,那就是WM_NOTIFY,我试着对此做一下比较全面的论述,有不对的地方,还希望各路大虾批评指正.     控件通知消息     在<深度解析VC中的消息(上)>中,我们提到了消息的分类有3种:窗口消息.命令消息和控件通知消息,我们这里要谈的是最后一种:控件通知消息.     控件通知消息,是指这样一种消息,一个窗口内的子控件发生了一些事情,需要通知父窗口.通知消息只适用于标准的窗口控件如按钮.列表框.组合框.编辑框,以及W

消息映射机制

消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉. 一个消息,是系统定义的一个32位的值,它唯一地定义了一个事件,向Windows发出一个通知,告诉应用程序某个事情发生了. 例如,单击鼠标.改变窗口尺寸.按下键盘上的一个键都会使Windows发送一个消息给应用程序. 消息可以由系统或者应用程序产生. 系统在发生输入事件时产生消息. 举个例子, 当用户敲键, 移动鼠标或者单击控件. 系统也产生消息以响应由应用程序带来的变化, 比如应用程序改变系统字体改变窗体大小. 应用程序可