重点:
1.创建一个专门自定义消息的头文件 constValue.h
#define WM_MY_CUSTOM_MESSAGE (WM_USER + 101) // 自定义消息ID
2.在你需要发送和接收该消息的类中,首先注册这个自定义消息。一般在窗口类(如CWnd派生类)的OnInitDialog、OnCreate或其他初始化函数中进行。
cpp
class CMyClass : public CWnd
{
DECLARE_DYNAMIC(CMyClass)
public:
CMyClass();
virtual ~CMyClass();
protected:
DECLARE_MESSAGE_MAP()
afx_msg LRESULT OnMyCustomMessage(WPARAM wParam, LPARAM lParam);
};
BEGIN_MESSAGE_MAP(CMyClass, CWnd)
ON_MESSAGE(WM_MY_CUSTOM_MESSAGE, &CMyClass::OnMyCustomMessage)
END_MESSAGE_MAP()
- 实现自定义消息处理器函数。当消息触发时,此函数会被调用。
cpp
LRESULT CMyClass::OnMyCustomMessage(WPARAM wParam, LPARAM lParam)
{
// 根据wParam和lParam处理自定义消息
int num = (int)lParam; //处理成所需要的信息
...
return 0; // 返回值可选,取决于具体应用场景
}
- 发送自定义消息。你可以在程序的任何地方通过
SendMessage
或PostMessage
函数向拥有该消息处理器的对象发送消息。
cpp
class SendMess
{
public:
static void SendMessage(HWND hWnd) ; //向需要发送的窗口发送消息
static std::set<HWND> m_hWnds; //存储需要发送消息的句柄
};
std::set<HWND> SendMess::m_hWnds;
void SendMess::SendMessage(HWND hWnd)
{
LPARAM myData = int(1);
::SendMessage(hWnd, WM_MY_CUSTOM_MESSAGE, 0, (LPARAM)myData);
}