找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2765|回复: 0
打印 上一主题 下一主题
收起左侧

MFC中自定义消息映射、循环机制

[复制链接]
跳转到指定楼层
楼主
ID:60266 发表于 2014-8-18 02:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

通过消息映射、数据同步等有效减低CPU使用率
MFC中自定义
消息映射、循环机制是Windows程序运行的基本方式。
VC++ MFC 中有许多现成的消息句柄,可当我们需要完成其它的任务,需要自定义消息,
就遇到了一些困难。在MFC ClassWizard中不允许添加用户自定义消息,所以我们必须手动在程序中添加相应代码,以便可以象处理其它消息一样处理自定义消息。

自定义消息的步骤如下:
(1)建立Single Document的MFC Application,工程名为:MyMessage
(2)自定义消息:
第一步:定义消息
在Resource.h中添加如下代码:

//推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。
#define WM_MY_MESSAGE (WM_USER+100)
第二步:声明消息处理函数
选择CMainFrame类中添加消息处理函数
在MainFrm.h文件中,类CMainFrame内,声明消息处理函数,代码如下:

protect:
    afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
第三步:实现消息处理函数
在MainFrm.cpp文件中添加如下代码:

LRESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
      //TODO: Add your message handle code
      return 0;
}
第四步:在CMainFrame类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    ON_WM_CREATE()
    ON_MESSAGE(WM_MY_MESSAGE,OnMyMessage)
    //ON_REGISTERED_MESSAGE (WM_MY_MESSAGE,OnMyMessage)
END_MESSAGE_MAP()
如果用户需要一个定义整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage定义消息:
在Resource.h中将代码

#define WM_MY_MESSAGE (WM_USER+100)
替换为:

static UINT WM_MY_MESSAGE=RegisterWindowMessage(_T("User"));
并使用ON_REGISTERED_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。
注:如果仍然使用ON_MESSAGE宏指令,compile可以通过,但是无法响应消息。
当需要使用自定义消息时,可以在相应类中的函数中调用函数PostMessage或SendMessage发送消息PoseMessage(WM_MY_MESSAGE,O,O)。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表