MFC自定义消息

扩展https://www.cnblogs.com/findumars/p/3948427.html

定义消息或资源中添加

#define WM_MYMESSAGE_XYG (WM_USER + 7943)

头文件中添加消息处理函数

class CVMDSModelView
{
protected:
...
    afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
...
DECLARE_MESSAGE_MAP()

cpp中添加消息映射处理

BEGIN_MESSAGE_MAP(CVMDSModelView, CScrollView)
  ON_MESSAGE(WM_MYMESSAGE_XYG, OnMyMessage)
END_MESSAGE_MAP()

实现消息处理函数

其中WPARAM wParam,LPARAM lParam二者为指针,所以发送自定义消息时如果想传相关参数,可以将参数的地址赋给这2个参数之一即可

LRESULT CVMDSModelView::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
  AfxMessageBox(_T("自定义消息!"));
  return 0;
}

自定义消息触发

PostMessage()与SendMessage()函数的区别是:SendMessage()的消息直接发给窗口并调用相应的消息响应函数,消息不进消息队列,但直到消息响应函数处理完后SendMessage()才返回。而PostMessage()将消息放入消息队列后立即返回。

// !!!在传递参数时一定要注意如果是传递局部变量一定是用SendMessage()函数,使用PostMessage当消息响应函数捕获到消息时局部变量可能已经被释放
SendMessage(WM_MYMESSAGE_XYG, 0, 0) 或
PostMessage(WM_MYMESSAGE_XYG, 0, 0); 
原文地址:https://www.cnblogs.com/xiongyungang/p/12012101.html