Mfc消息的响应机制

Mfc中有很多资源,如图标资源,菜单资源,工具栏资源等等;那么,资源是如何进行消息响应和消息映射的呢?

它们的流程是:

某种资源——对应的ID号——消息映射——响应函数的声明与实现

下面我们以工具栏的资源响应为例:(多文档的应用程序)

1.       在工具栏资源增加一个图标(随便画一下),双击它,设置它的资源ID为:ID_MYICON

2.       在View类的.cpp文件中添加消息映射;

找到BEGIN_MESSAGE_MAP()与END_MESSAGE_MAP()

之间的代码,添加消息映射语句

ON_COMMAND(ID_MYICON,OnMyicon)

其中,第一个参数是资源的ID号;第二个为消息响应的函数名,为了与MFC的习惯保持一致,我们将其命名为OnMyicon

3.       消息响应函数的声明

在View类中增加成员函数afx_msg void OnMyicon();

4.       消息响应函数的实现

在View类的.cpp文件中实现OnMyicon()函数;

void CXXXXXView::OnMyicon()

{

MessageBox("消息映射成功!");

}

菜单资源的消息响应机制于此完全相同;

Windows操作系统中包括以下几种消息:

1、标准Windows消息:这种消息以WM_打头。   

2、通知消息   

通知消息是针对标准Windows控件的消息。

这些控件包括:按钮(Button)、组合框(ComboBox)、编辑框(TextBox)、列表框(ListBox)、ListView控件、Treeview控件、工具条(Toolbar)、菜单(Menu)等。每种消息以不同的字符串打头。(见附录)   

3、自定义消息  编程人员还可以自定义消息。

附录:

从MSDN中,我们可以看查到很多的ON_开头的,一下列举其中一些示例

User Button Handlers(按钮)

Map Entry

Function Prototype

ON_BN_CLICKED( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_BN_DISABLE( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_BN_DOUBLECLICKED( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_BN_HILITE( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_BN_PAINT( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_BN_UNHILITE( <id>, <memberFxn> )

afx_msg void memberFxn( );

Combo Box Handlers(组合框)

Map Entry

Function Prototype

ON_CBN_CLOSEUP( <id>, <memberFxn> )

afx_msg void memberFxn( )

ON_CBN_DBLCLK( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_CBN_DROPDOWN( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_CBN_EDITCHANGE( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_CBN_EDITUPDATE( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_CBN_ERRSPACE( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_CBN_KILLFOCUS( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_CBN_SELCHANGE( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_CBN_SELENDCANCEL( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_CBN_SELENDOK( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_CBN_SETFOCUS( <id>, <memberFxn> )

afx_msg void memberFxn( );

Edit Control Handlers(编辑框)

Map Entry

Function Prototype

ON_EN_CHANGE( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_EN_ERRSPACE( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_EN_HSCROLL( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_EN_KILLFOCUS( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_EN_MAXTEXT( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_EN_SETFOCUS( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_EN_UPDATE( <id>, <memberFxn> )

afx_msg void memberFxn( );

ON_EN_VSCROLL( <id>, <memberFxn> )

afx_msg void memberFxn( );

等等………………………………(参看MSDN)

Mfc资源消息的响应机制的更多相关文章

  1. MFC的消息响应机制说明

    MFC的快速理解: 1.MFC的设计者们在设计MFC时,有一个主要的方向就是尽可能使得MFC的代码要小,速度尽可能快.为了这个方向,工程师们使用了许多技巧,主要表现在宏的运用上,实 现MFC的消息映射 ...

  2. MFC的消息映射机制揭秘

    MFC的设计者们在设计MFC时,紧紧把握一个目标,那就是尽可能使得MFC的代码要小,速度尽可能快.为了这个目标,他们使用了许多技巧,其中很多技巧体现在宏的运用上,实现MFC的消息映射的机制就是其中之一 ...

  3. MFC消息响应机制 q

    MFC消息响应机制分析 1 引言微软公司提供的MFC基本类库(Microsoft Foundation Classes),是进行可视化编程时使用最为流行的一个类 库.MFC封装了大部分Windows ...

  4. MFC中消息响应机制

    由于视类窗口始终覆盖在框架类窗口之上,因此所有操作,包括鼠标单击.鼠标移动等操作都只能由视类窗口捕获.一个MFC消息响应函数在程序中有三处相关信息:函数原型.函数实现和以及用来关联消息和消息响应函数的 ...

  5. MFC消息响应机制分析

    ---- 摘要: ---- MFC是Windows下程序设计的最流行的一个类库,但是该类库比较庞杂,尤其是它的消息映射机制,更是涉及到很多低层的东西,我们在这里,对它的整个消息映射机制进行了系统的分析 ...

  6. MFC的消息机制

    MFC的消息循环(::GetMessage,::PeekMessage)消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情 分两个步骤完成: 1 “ ...

  7. HTTP请求响应机制与响应状态码

    转载来源:http://blog.csdn.net/xyw591238/article/details/51907143 HTTP协议 Internate的基本协议是TCP/IP(传输控制协议和网际协 ...

  8. 001-RESTful服务最佳实践-RestFul准则、HTTP动词表示含义、合理的资源命名、响应格式XML和JSON

    一.概述 因为REST是一种架构风格而不是严格的标准,所以它可以灵活地实现.由于这种灵活性和结构自由度,对设计最佳实践也有很大的差异. API的方向是从应用程序开发人员的角度考虑设计选择. 幂等性 不 ...

  9. MFC中用户自定义类响应自定义消息

    这篇技术文章不是讨论经典的MFC中的消息工作机理的,讨论消息工作原理.方式和路径的文章在网上和书本中随处可见.网上众多的讨论都是关于如何响应并进行用户自定义消息映射的:网上还有一些文章介绍如何在自定义 ...

随机推荐

  1. Python 模块续和面向对象的介绍(六)

    一.基本模块 shutil 文件.目录.压缩包的处理模块 shutil.copyfile(src, dst) 拷贝文件 >>> shutil.copyfile('a.log','b. ...

  2. Ural 1086 - Cryptography

    While preparing this problem set the jury has run into the following problem: it was necessary to se ...

  3. NET Core全新的开发体验

    NET Core全新的开发体验 2016年6月27日,这是一个特殊的日子,微软全新的.NET开发平台.NET Core的RTM版本正式发布.我个人将.NET Core的核心特性归结为三点,它们的首字母 ...

  4. PHP urlencode()和rawurlencode()使用和区别

    string urlencode ( string $str ) 此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页. 返回值 返回字符串,此字符串中除了 -_. 之 ...

  5. 基于visual Studio2013解决C语言竞赛题之0502最小数替换

         题目

  6. 找球号(一)(hask表)

    找球号(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 在某一国度里流行着一种游戏.游戏规则为:在一堆球中,每个球上都有一个整数编号i(0<=i<= ...

  7. BZOJ 1072 [SCOI2007]安排perm 如压力DP

    意甲冠军:联系 方法:状压DP? 题解:这题事实上没啥好写的.不算非常难,推一推就能搞出来. 首先看到这个问题,对于被d整除这个条件,非常easy就想到是取余数为0,所以想到可能状态中刚開始含有取余数 ...

  8. php - 小型微博系统

    效果: 数据库: 项目结构: add.php : 添加微博. conn.php : 数据库配置文件. delete.php : 删除博客代码. disinfo.php : 显示微博详细信息. inde ...

  9. Arduino 入门程序示例之一排 LED(2015-06-11)

    概述 最简单的一个 LED 的实验之后,自然是增加几个 LED,咱排成一排来玩吧.最后,再把一排的 LED 排成一个 8 字来玩——七段数码管. 示例程序 流水灯 第一个出场的肯定是经典的流水灯,也叫 ...

  10. 第三届蓝桥杯 c/c++真题

    第三届蓝桥杯真题 c/c++ 以下题目我自己也并不是所有的题目都是一次性就能做对或是有结题思路的.有些题目也是经过查证网上相关的资料或是参考了别人的代码和解题思路才做出来的.总的来看,这份题目考了很多 ...