博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mfc资源消息的响应机制
阅读量:7123 次
发布时间:2019-06-28

本文共 2555 字,大约阅读时间需要 8 分钟。

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)

转载地址:http://isiel.baihongyu.com/

你可能感兴趣的文章
马哥linux视频的学习笔记
查看>>
Nginx反向代理实现负载均衡web集群
查看>>
Linux之FineBI集群部署
查看>>
iOS版本更新与集成百度地图
查看>>
【学生管理系统】
查看>>
Storm原理与实现
查看>>
《数据库系统概念》20-恢复系统
查看>>
$.ajax 简单记录
查看>>
vbr和cbr
查看>>
su命令
查看>>
virtio分析
查看>>
SVN使用方法及问题解决
查看>>
Linux- 日常运维-w-查看系统负载
查看>>
Spring4+Springmvc+quartz实现多线程动态定时调度
查看>>
Mozilla在Thunderbird 60.3中的修补了多个安全漏洞
查看>>
HDFS进阶应用 配置 NFS 网关
查看>>
[小型企业]不同vlan配置DHCP服务
查看>>
定时任务执行利器Timer和ScheduledThreadPoolExecutor使用
查看>>
iOS 网络编程(二)
查看>>
mysql用户管理
查看>>