MFC一一添加WM_USER自定义消息

  有些时候,我们希望自定义一些消息响应函数来控制何时进行消息触发,或针对两个不同类或线程之间进行消息互动,这个时候自定义消息响应函数就起到很大作用了。那么如何添加自定义消息呢?具体分为以下几步:

如下是一个SDI应用程序关于用户测试界面刷新的代码片段,可以参考其实现过程:

(1).定义WM_USER宏

#define WM_USER_REFURBISH_TEST_RESULT        (WM_USER + 1001)

(2).添加消息映射宏
BEGIN_MESSAGE_MAP(CFormView_Main, CFormView)
    ON_MESSAGE(WM_USER_REFURBISH_TEST_RESULT, &CFormView_Main::OnUserRefurbishTestResult)
    ON_WM_CREATE()
    ON_WM_SIZE()
END_MESSAGE_MAP()


(3)在头文件类的定义中声明消息响应函数
afx_msg LRESULT OnUserRefurbishTestResult(WPARAM wParam, LPARAM lParam);


(4)定义并实现消息响应函数
afx_msg LRESULT CFormView_Main::OnUserRefurbishTestResult(WPARAM wParam, LPARAM lParam)
{
    CString*p_str = (CString *)lParam;
    switch (wParam)
    {
    case _E_STATUS_PASS:
        m_CtrlStaticResult.SetBkColor(gsColor[COLOR_LIME]);
        m_CtrlStaticResult.SetWindowText(_T("PASS"));
        break;
    case _E_STATUS_FAIL:
        m_CtrlStaticResult.SetBkColor(gsColor[COLOR_RED]);
        m_CtrlStaticResult.SetWindowText(_T("FAIL"));
        break;
    case _E_STATUS_DOING:
        m_CtrlStaticResult.SetBkColor(gsColor[COLOR_YELLOW]);
        m_CtrlStaticResult.SetWindowText(*p_str);
        break;
    default:
        m_CtrlStaticResult.SetBkColor(gsColor[COLOR_PINK]);
        m_CtrlStaticResult.SetWindowText(_T("Ready"));
        break;
    }
    return 0;
}
      我们可以看到,消息响应中的函数包含了wParam和lParam参数,在消息响应发送的时候,可以根据不同需求来进行定义,如下是消息响应发送的实现示例:
/*
LRESULT SendMessage(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM IParam);
参数:
 hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。
  wMsg用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量.
  wParam通常是一个与消息有关的常量值,也可能是窗口或控件的句柄
  lParam通常是一个指向内存中数据的指针。由于WParm、lParam和Pointer都是32位的,因此,它们之间可以相互转换
  返回值:返回值指定消息处理的结果,依赖于所发送的消息。
*/
SendMessage(WM_USER_REFURBISH_TEST_RESULT,_E_STATUS_READY,NULL);
SendMessage(WM_USER_REFURBISH_TEST_RESULT,_E_STATUS_DOING,(LPARAM)&strInfo);
--------------------- 

原文:https://blog.csdn.net/xuanyin235/article/details/77971146 
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值