SendMessage发送的消息怎么接收不了?

时间:2020-12-03 19:32:52
1、CMsg是一个CObject类,头文件声明了: 
CString from; //用户名
CString ip; //用户ip
在CConferenceView接收网络传来的数据,并触发事件: 
CMsg msg;
AfxGetMainWnd()->SendMessage(WM_ADDLIST + 1, (LPARAM)&(msg), 6); 

2、然后在CMainFrame中响应事件,并把用户显示在m_olist的列表中 
void CMainFrame::OnAddMember(WPARAM wParam, LPARAM lParam)
{
CMsg* pStr = (CMsg*)wParam;
this->dlgBar.m_olist.AddItem(0, pStr->from.GetBuffer(0), pStr->ip.GetBuffer(0));
pStr->from.ReleaseBuffer();
pStr->ip.ReleaseBuffer();


}
但是接收不了任何消息,怎么办?谢谢!!

18 个解决方案

#1


原来的源码只是传递from的数据,没有任何问题。代码如下:
在CConferenceView接收网络传来的数据,并触发事件: 
AfxGetMainWnd()->SendMessage(WM_ADDLIST + 1, (LPARAM)&(msg.from), 6); 
2、然后在CMainFrame中响应事件,并把用户显示在m_olist的列表中 
void CMainFrame::OnAddMember(WPARAM wParam, LPARAM lParam) 

CString* pStr = (CString*)wParam; 
this->dlgBar.m_olist.AddItem((short)lParam, pStr->GetBuffer(0), NULL); 
pStr->ReleaseBuffer(); 


#2


可以改成postmessage试试

#3


还是不行啊?

#4


消息映射在哪里?

#5


函数定义都错误了,怎么可以定义为void类型的函数呢,改一下函数定义看看能否成功

#6


void CMainFrame::OnAddMember(WPARAM wParam, LPARAM lParam)  消息响应函数是这样定义的吗?
我记得原型是LRESULT OnMsgProc(HWND,UINT, WPARAM wParam, LPARAM lParam)吧 如果是ATL的就是
LRESULT OnMsgProc(UINT, WPARAM wParam, LPARAM lParam, BOOL&);

#7


消息映射怎么写的?WM_ADDLIST + 1这个消息在哪响应的?

#8


WM_ADDLIST + 1是多少? 是否与函数映射到消息一致?

#9


引用楼主 yeyuanzhi2010 的回复:
1、CMsg是一个CObject类,头文件声明了:
CString from; //用户名
CString ip; //用户ip
在CConferenceView接收网络传来的数据,并触发事件:
CMsg msg;
AfxGetMainWnd()->SendMessage(WM_ADDLIST + 1, (LPARAM)&(msg), 6);

2、然后在CMainFrame中响应事件,并把用户显示在m_olist的列表中
void CMainFrame::OnAddMember(WPARAM wParam, LPARAM lParam)
{
CMsg* pStr = (CMsg*)wParam;
this->dlgBar.m_olist.AddItem(0, pStr->from.GetBuffer(0), pStr->ip.GetBuffer(0));
pStr->from.ReleaseBuffer();
pStr->ip.ReleaseBuffer();


}
但是接收不了任何消息,怎么办?谢谢!!

是收不到消息还是收不到数据

CMsg msg; 
AfxGetMainWnd()->SendMessage(WM_ADDLIST + 1, (LPARAM)&(msg), 6); 

这里并没有给msg赋值

#10


WM_ADDLIST + 1 消息是不是没有处理?

#11


消息函数返回应为LRESULT,还有消息映射写对了吗????!!!!!

#12


先学习一下怎么发送自定义消息吧

#13


同意12楼的说法,让他自己先学习一下如何自定义消息吧.

#14


引用 9 楼 conry 的回复:
引用楼主 yeyuanzhi2010 的回复:
1、CMsg是一个CObject类,头文件声明了:
CString from; //用户名
CString ip; //用户ip
在CConferenceView接收网络传来的数据,并触发事件:
CMsg msg;
AfxGetMainWnd()->SendMessage(WM_ADDLIST + 1, (LPARAM)&(msg), 6);

2、然后在CMainFrame中响应事件,并把用户显示在m_olist的列表中
void CMainFrame::OnAddMember(WPARAM wParam, LPARAM lParam)
{
CMsg* pStr = (CMsg*)wParam;
this->dlgBar.m_olist.AddItem(0, pStr->from.GetBuffer(0), pStr->ip.GetBuffer(0));
pStr->from.ReleaseBuffer();
pStr->ip.ReleaseBuffer();


}
但是接收不了任何消息,怎么办?谢谢!!


是收不到消息还是收不到数据

CMsg msg;
AfxGetMainWnd()->SendMessage(WM_ADDLIST + 1, (LPARAM)&(msg), 6);

这里并没有给msg赋值

是收不到数据,还有msg已经赋值了呀。它是从存档中取出信息msg.Serialize (*m_pArchiveIn);我是从1楼的代码中修改而成的,而1楼接收数据是没问题的。

#15


引用 8 楼 zgl7903 的回复:
WM_ADDLIST + 1是多少? 是否与函数映射到消息一致?

消息映射在CMainFrame中,定义如下:
ON_MESSAGE(WM_ADDLIST+ 1, OnAddMember)

#16


是进不到void CMainFrame::OnAddMember(WPARAM wParam, LPARAM lParam) 函数吗?
如果是这样的话 在 AfxGetMainWnd()->SendMessage(WM_ADDLIST + 1, (LPARAM)&(msg), 6)句之前加 CWnd *p=AfxGetMainWnd();看看p的值对不对

#17


谢谢各位的指点!!现在可以接收数据了。但是奇怪,怎么只能接收from的数据,而ip数据却没有显示呢????

#18


解决了。辛苦各位了!!!

#1


原来的源码只是传递from的数据,没有任何问题。代码如下:
在CConferenceView接收网络传来的数据,并触发事件: 
AfxGetMainWnd()->SendMessage(WM_ADDLIST + 1, (LPARAM)&(msg.from), 6); 
2、然后在CMainFrame中响应事件,并把用户显示在m_olist的列表中 
void CMainFrame::OnAddMember(WPARAM wParam, LPARAM lParam) 

CString* pStr = (CString*)wParam; 
this->dlgBar.m_olist.AddItem((short)lParam, pStr->GetBuffer(0), NULL); 
pStr->ReleaseBuffer(); 


#2


可以改成postmessage试试

#3


还是不行啊?

#4


消息映射在哪里?

#5


函数定义都错误了,怎么可以定义为void类型的函数呢,改一下函数定义看看能否成功

#6


void CMainFrame::OnAddMember(WPARAM wParam, LPARAM lParam)  消息响应函数是这样定义的吗?
我记得原型是LRESULT OnMsgProc(HWND,UINT, WPARAM wParam, LPARAM lParam)吧 如果是ATL的就是
LRESULT OnMsgProc(UINT, WPARAM wParam, LPARAM lParam, BOOL&);

#7


消息映射怎么写的?WM_ADDLIST + 1这个消息在哪响应的?

#8


WM_ADDLIST + 1是多少? 是否与函数映射到消息一致?

#9


引用楼主 yeyuanzhi2010 的回复:
1、CMsg是一个CObject类,头文件声明了:
CString from; //用户名
CString ip; //用户ip
在CConferenceView接收网络传来的数据,并触发事件:
CMsg msg;
AfxGetMainWnd()->SendMessage(WM_ADDLIST + 1, (LPARAM)&(msg), 6);

2、然后在CMainFrame中响应事件,并把用户显示在m_olist的列表中
void CMainFrame::OnAddMember(WPARAM wParam, LPARAM lParam)
{
CMsg* pStr = (CMsg*)wParam;
this->dlgBar.m_olist.AddItem(0, pStr->from.GetBuffer(0), pStr->ip.GetBuffer(0));
pStr->from.ReleaseBuffer();
pStr->ip.ReleaseBuffer();


}
但是接收不了任何消息,怎么办?谢谢!!

是收不到消息还是收不到数据

CMsg msg; 
AfxGetMainWnd()->SendMessage(WM_ADDLIST + 1, (LPARAM)&(msg), 6); 

这里并没有给msg赋值

#10


WM_ADDLIST + 1 消息是不是没有处理?

#11


消息函数返回应为LRESULT,还有消息映射写对了吗????!!!!!

#12


先学习一下怎么发送自定义消息吧

#13


同意12楼的说法,让他自己先学习一下如何自定义消息吧.

#14


引用 9 楼 conry 的回复:
引用楼主 yeyuanzhi2010 的回复:
1、CMsg是一个CObject类,头文件声明了:
CString from; //用户名
CString ip; //用户ip
在CConferenceView接收网络传来的数据,并触发事件:
CMsg msg;
AfxGetMainWnd()->SendMessage(WM_ADDLIST + 1, (LPARAM)&(msg), 6);

2、然后在CMainFrame中响应事件,并把用户显示在m_olist的列表中
void CMainFrame::OnAddMember(WPARAM wParam, LPARAM lParam)
{
CMsg* pStr = (CMsg*)wParam;
this->dlgBar.m_olist.AddItem(0, pStr->from.GetBuffer(0), pStr->ip.GetBuffer(0));
pStr->from.ReleaseBuffer();
pStr->ip.ReleaseBuffer();


}
但是接收不了任何消息,怎么办?谢谢!!


是收不到消息还是收不到数据

CMsg msg;
AfxGetMainWnd()->SendMessage(WM_ADDLIST + 1, (LPARAM)&(msg), 6);

这里并没有给msg赋值

是收不到数据,还有msg已经赋值了呀。它是从存档中取出信息msg.Serialize (*m_pArchiveIn);我是从1楼的代码中修改而成的,而1楼接收数据是没问题的。

#15


引用 8 楼 zgl7903 的回复:
WM_ADDLIST + 1是多少? 是否与函数映射到消息一致?

消息映射在CMainFrame中,定义如下:
ON_MESSAGE(WM_ADDLIST+ 1, OnAddMember)

#16


是进不到void CMainFrame::OnAddMember(WPARAM wParam, LPARAM lParam) 函数吗?
如果是这样的话 在 AfxGetMainWnd()->SendMessage(WM_ADDLIST + 1, (LPARAM)&(msg), 6)句之前加 CWnd *p=AfxGetMainWnd();看看p的值对不对

#17


谢谢各位的指点!!现在可以接收数据了。但是奇怪,怎么只能接收from的数据,而ip数据却没有显示呢????

#18


解决了。辛苦各位了!!!