博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC的自定义消息(用户消息)的定义与使用
阅读量:4107 次
发布时间:2019-05-25

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

[转自:http://blog.csdn.net/nuptboyzhb/article/details/7354702],略加整理及补充。

自定义消息的响应和资源消息的响应有很多类似之处;资源消息的响应是以资源的ID号作为标识的;自定义的消息要自己声明消息ID。

一.定义

第一步,声明消息:

#define WM_MYMSG  (WM_USER + 100)

第二步,在类声明中声明消息映射:

DECLARE_MESSAGE_MAP()

第三步,在类声明中定义消息处理函数:

afx_msg LRESULT MyMsgHandler(WPARAM,LPARAM);

在.cpp中做的工作:

第四步,实现消息映射:

BEGIN_MESSAGE_MAP()

        ON_MESSAGE(WM_MYMSG,OnMyMsgHandler)

END_MESSAGE_MAP()

第五步,要实现消息处理函数(当然可以不实现):

LRESULT CMainFrame::OnMyMsgHandler(WPARAM w, LPARAM l)

{

        AfxMessageBox("Hello,World!");

        return 0;

}

二.使用

1.      如果该自定义消息所在的类是有CWnd派生出来的,且在本类中调用,那么我们可以调用CWnd::SendMessage()函数,具体定义为:

LRESULT SendMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );

        此时我们只需要在引发消息的地方添加如下代码:

SendMessge(WM_MYMSG,0,0);

        如果我们想在不同的情况下发送用户消息,我们只需要将SendMessage的后两个参数wParam,lParam加以标识即可;在消息处理函数,写一个if条件语句(或switch语    句)就可以了;将不同情况下的用户消息区分开;

2.      如果不在本类中响应自定义消息;那么我们只能用win32 的API函数。

         例如,当自定义消息在CMainFrame中,而触发消息的地方不在CMainFrame类中,那么我们可以用如下语句:

::SendMessge(::AfxGetMainWnd()->m_hWnd, WM_MYMSG, 0, 0);

         定义消息在地方在活动视图中:

         CMainFrame *pMain = (CMainFrame *) AfxGetMainWnd();

         pMain->GetActiveView()->PostMessage(WM_MYMSG, 0, 0);
          

你可能感兴趣的文章
COMMTIMEOUTS详解
查看>>
网络通信时字节序转换原理与网络字节序、大端和小端模式
查看>>
用PostMessage或SendMessage发送结构体指针
查看>>
[VC]SendMessage和PostMessage发送消息(不同进程传递字符串)
查看>>
使用J-Link ARM烧录FLASH
查看>>
驻波比
查看>>
解FPGA中的RAM、ROM和CAM;ROM、RAM、DRAM、SRAM、FLASH
查看>>
FPGA的基础知识
查看>>
银联POS规范总结
查看>>
NFC无线功能
查看>>
APN
查看>>
MDK中One ELF Section per Function选项功能探究
查看>>
基于PBOC的电子钱包消费交易过程
查看>>
uC/OS-II源码分析(总体思路 三)
查看>>
uC/OS-II源码分析(总体思路 二)
查看>>
uC/OS-II源码分析(总体思路一)
查看>>
一种三极管开关电路设计
查看>>
一个实用的三极管开关电路分析
查看>>
大电容滤低频,小电容滤高频?——滤波电容的选择 .
查看>>
浅谈为什么大电容滤低频小电容滤高频的问题
查看>>