函数声明
LRESULT SendMessage( __in HWND hWnd,
__in UINT Msg,
__in WPARAM wParam,
__in LPARAM lParam );
hWnd 参数:窗口句柄。窗口可以是任何类型的屏幕对象。
Msg 参数:用于区别其他消息的常量值。
wParam 参数:通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。
lParam 参数:通常是一个指向内存中数据的指针。
http://blog.csdn.net/rbmwjyc/article/details/78981751
1.自定义消息名
首先要自定义一个用户消息,我们一般用WM_USER +n来定义消息ID,n要大于100,小于100的已经被系统消息ID占用。
该操作一般位于头文件中。
#define WM_MYMSG WM_USER+101
2.声明一个函数用于接收消息。一般也放在头文件中
afx_msg LRESULT OnMyMsg(WPARAM wParam,LPARAM lParam);
3.给消息绑定接收函数
ON_MESSAGE(WM_MYMSG, OnMyMsg)
如果是基于MFC编程,在
//将消息和函数绑定
BEGIN_MESSAGE_MAP(CTraVariety, CDialog)
//{{AFX_MSG_MAP(CTraVariety)
、、、、、、、、
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
里面添加这句代码即可
4.定义消息接收函数,该函数位于下面的第5步中 句柄所代表的区域
LRESULT CTestClass::OnMyMsg(WPARAM wParam,LPARAM lParam)//登录成功消息
{
CString *nameMsg = (CString *)wParam;
/*********/
}
5.确定一个用来接收消息的句柄,该句柄要包含上述第4步中的消息接收函数
比如我们可以这样做:
HWND m_hMainWnd;//句柄变量
给句柄赋值
void CTraVariety::CTPInitWnd(CTraderSpi* UserSpi)
{
// 将pUserSpi的消息响应窗口设置为本窗口 //传递主窗口句柄:
UserSpi->SetHwnd(this->m_hWnd);
}
SetHwnd()函数定义如下:
void CTraderSpi::SetHwnd(HWND hWnd)
{
m_hMainWnd = hWnd;
}
6.最后,你就可以随意使用SendMessage了,第一个参数是你想让这个消息发送到哪个句柄,第二个参数是消息的名,
第三个参数是发送的数据
//发送自定义消息
::SendMessage(m_hMainWnd,WM_USERLOGIN_RSP,(WPARAM)nameMsg,NULL);