VC中自定义消息实现

转载 2007年09月19日 08:20:00
在VC项目开发中,很多时候需要自己定义消息进行事务处理。上次也刚好有同学问及,这里综合网络上的一些资料,集中起来供参考。
u       自定义消息
我们可以通过一下两种方法来自定义一个消息:
1) 方法一
Step 1:使用WM_TASKBARCREATED来确定一个没有被windows本身抢占
的消息值,在想添加消息文件中添加代码:
const UINT WM_USERDEFMSG = ::RegisterWindowMessage(_T("UserDefMsg"));
Step 2:定义消息的处理过程:在处理消息的类(如Dlg类或者MainFrame等)
添加消息处理函数声明:
afx_msg LRESULT OnUserDefMsg(WPARAM wParam,LPARAM lParam);
       在实现文件中添加消息处理实现,这里给出一个实现例子:
LRESULT ××××::OnUserDefMsg(WPARAM wParam,LPARAM lParam)
//××××代表处理该消息的类名

 

{
       MessageBox("响应了自定义的消息,^_^","自定义消息响应",MB_ICONQUESTION | MB_OK);
       return 0;
}
       Step 3:添加消息处理宏,在处理该消息的类的消息宏中添加自定义消息的宏,即在BEGIN_MESSAGE_MAP代码块中添加代码:
ON_REGISTERED_MESSAGE(WM_USERDEFMSG, OnUserDefMsg)
       自定义消息完毕。
2) 方法二
Step 1:定义消息值,这里不通过RegisterWindowMessage获取,而是自定义方式实现,
在想添加消息文件中添加代码:
#define WM_USERDEFMSG (WM_USER + 101)
       Microsoft推荐自定义消息值至少为WM_USER + 100
       Step 2:同方法一中实现;
       Step 3:同方法一中,但是宏名称改为ON_MESSAGE。
u       发送消息
按照上面方式我们已经自定义了消息,并为该消息实现了简单的处理过程,这里就通过
发送消息获得自定义消息的响应。在要触发自定义消息地方添加代码:
::SendMessage(GetSafeHwnd(),WM_USERDEFMSG,0L,0L);
       这样你就触发了该自定义消息,并将得到提示对话框显示。
下面是第二种增加自定义消息方法的步骤:

第一步:定义消息。开发Windows95应用程序时,Microsoft推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。

第二步:实现消息处理函数。该函数使用WPRAM和LPARAM参数并返回LPESULT。

LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
// TODO: 处理用户自定义消息
...
return 0;
}
第三步:在类头文件的AFX_MSG块中说明消息处理函数:

class CMainFrame:public CMDIFrameWnd
{
...
// 一般消息映射函数
protected:
// {{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
}
第四步:在用户类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中。

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_TIMER()
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

如果用户需要一个整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage并使用ON_REGISTER_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。
 
 

VC++ 自定义消息学习总结

VC添加自定义消息 http://blog.csdn.net/jinnee_cumtb/article/details/4524375     VC的ClassWizard不允许增加用户自定义消息,所...
  • bcbobo21cn
  • bcbobo21cn
  • 2017年03月31日 21:09
  • 311

VC编程DLL通知应用程序exe通信(使用自定义消息实现)

源文件下载: 1. 用VC创建两个工程,一个工程是DLL的(基于使用MFC的动态链接库的),假设名字为MFC_DLL;另一个是EXE的(基于MFC的应用程序),设工程名为MFC_EXE; 2. MFC...
  • dijkstar
  • dijkstar
  • 2015年09月27日 12:36
  • 1790

vc 自定义消息实现

本案例是根据两个dialog 相互通信总结而来,在两个dialog都设置好后,分为四步实现消息传递: 项目名称为:MFCmiltiWin 主dialog:CMFCmiltiWinDlg 从dia...
  • BlueCY
  • BlueCY
  • 2017年04月13日 11:12
  • 361

VC中自定义消息实现

在VC项目开发中,很多时候需要自己定义消息进行事务处理。上次也刚好有同学问及,这里综合网络上的一些资料,集中起来供参考。 u       自定义消息 我们可以通过一下两种方法来自定义一个消息: ...
  • colapin
  • colapin
  • 2015年09月22日 16:02
  • 207

VC 向其他进程窗口发送自定义消息

发送端:
  • w839687571
  • w839687571
  • 2014年07月08日 12:34
  • 2814

利用MFC消息映射机制自定义消息

MFC消息映射机制的具体实现方法是:在每个能接收和处理消息的类中,定义一个消息和消息函数静态对照表,即消息映射表。在消息映射表中,消息与对应的消息处理函数指针是成对出现的。某个类能处理的所有消息及其对...
  • wangwenjing90
  • wangwenjing90
  • 2013年01月08日 16:23
  • 994

Vc/MFC中自定义消息及其PostMessage触发使用

http://blog.csdn.net/ztz0223/article/details/2058402 http://blog.csdn.net/a8082649/article/details/...
  • lizhenmingdirk
  • lizhenmingdirk
  • 2015年05月26日 18:17
  • 5319

vc如何自定义消息与在线程中向主窗体控件发送数据

如何定义消息: 1.定义消息: 在对话框类的头文件中定义一个自定义消息 #define WM_MY_MESSAGE WM_USER+100 2.在类中声明该消息的处理函数: 在该类声明的内部...
  • educast
  • educast
  • 2013年09月11日 17:07
  • 1986

VC6添加自定义消息(主窗口向子窗口发送消息)

1、定义消息。在Windows中,所有的消息都用一个特定的整数值来表示,为了避免自定义消息与已存在的其他消息发生冲突,应该利用Windows提供的一个常量:WM_USER,小于这个常量的是系统保留的。...
  • phenixyf
  • phenixyf
  • 2013年07月11日 14:27
  • 2702

vc/mfc 进程消息队列,线程消息队列,和系统消息队列,该如何处理

队列消息和非队列消息   从消息的发送途径来看,消息可以分成2种:队列消息和非队列消息。消息队列由可以分成系统消息队列和线程消息队列。系统消息队列由Windows维护,线程消息队列则由每个GUI...
  • djb100316878
  • djb100316878
  • 2014年10月04日 00:18
  • 2237
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC中自定义消息实现
举报原因:
原因补充:

(最多只允许输入30个字)