在控件项目中经常要发送一些信息给某个对象,这时就想到了使用窗体消息来传递。虽然有时候传递对象的指针也是可行的,但他往往没有传递句柄来的更方便,因为传递指针需要引入头文件,头文件相互引入比较多时,管理上会比较混乱。
1.创建一个对话框工程,工程名称“发送消息”
2.添加一个“MFC类”,类名称为CRevMessage,基类选择CWnd
3.在RevMessage.h中添加自定义消息
#define WM_MY_EVENT WM_USER+1
4.在CRevMessage类中添加消息映射函数afx_msg LRESULT DispatchMsg(WPARAM wParam,LPARAM lParam);
头文件:
#pragma once #define WM_MY_EVENT WM_USER+1 // CRevMessage class CRevMessage : public CWnd { DECLARE_DYNAMIC(CRevMessage) public: CRevMessage(); virtual ~CRevMessage(); protected: DECLARE_MESSAGE_MAP() public: afx_msg LRESULT DispatchMsg(WPARAM wParam,LPARAM lParam); };
源文件:
// RevMessage.cpp : 实现文件 // #include "stdafx.h" #include "发送消息.h" #include "RevMessage.h" // CRevMessage IMPLEMENT_DYNAMIC(CRevMessage, CWnd) CRevMessage::CRevMessage() { } CRevMessage::~CRevMessage() { } BEGIN_MESSAGE_MAP(CRevMessage, CWnd) ON_MESSAGE(WM_MY_EVENT, &CRevMessage::DispatchMsg) END_MESSAGE_MAP() // CRevMessage 消息处理程序 LRESULT CRevMessage::DispatchMsg(WPARAM wParam,LPARAM lParam) { char *str = (char*)lParam; int iEvent = (int)wParam; return 0; }
5.在对话框工程中发送消息:
void C发送消息Dlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 CRevMessage msg; CRect rect; msg.Create(NULL, NULL, 0, rect, this, 111); if (NULL != msg.m_hWnd) { char str[100] = "Hello,world!"; int iEvent = 100; //msg.SendMessage(WM_MY_EVENT, (WPARAM)iEvent, (LPARAM)(str)); ::SendMessage(msg.m_hWnd, WM_MY_EVENT, (WPARAM)iEvent, (LPARAM)(str)); } }