主对话框线程接收消息,在子对话框listcontrlo中显示

时间:2021-12-25 18:21:29
主对话框的线程中接收网络数据,下面为消息响应
DWORD WINAPI CSimuEquipDlg::RecvProc(LPVOID lpParameter)
{
SOCKET sock=((RECVPARAM*)lpParameter)->sock;
HWND hwnd=((RECVPARAM*)lpParameter)->hwnd;

SOCKADDR_IN addrRecv;
int len = sizeof(SOCKADDR); 

char recvBuf[500];
int recvRst;

while(TRUE)
{
recvRst = recvfrom(sock, recvBuf, 500, 0, (SOCKADDR*)&addrRecv, &len);

if (SOCKET_ERROR == recvRst)
{
break;
}
::PostMessage(hwnd, WM_RECVDATA, 0, (LPARAM)recvBuf);
}
return 0;
}

void CSimuEquipDlg::OnRecvData(WPARAM wParam,LPARAM lParam)

{
...//数据处理
CZZParameter dlg;//子对话框类
CString tmp;
tmp.Format("%d",p->time);
dlg.m_ZZParaListCtrl.InsertItem(CPublic::Parameter,tmp);
...

子对话框接收不到啊,是不是VC不能对子对话框上的控件进行更新显示啊?我应该怎么处理?

7 个解决方案

#1


线程发消息给主线程,然后主线程操作子对话框控件

#2


引用 1 楼 oyljerry 的回复:
线程发消息给主线程,然后主线程操作子对话框控件
我这个现在就是主线程操作子对话框控件吧,但是貌似没有更新

#3


WM_RECVDATA 这个是自定义消息 要加3个地方:
1 #define WM_RECVDATA WM_USER+101  // .h
2 BEGIN_MESSAGE_MAP(CxxxxDlg, CDialog) // .cpp
//{{AFX_MSG_MAP(CxxxxDlg)
ON_MESSAGE(WM_RECVDATA,OnRevdata)
//}}AFX_MSG_MAP
 END_MESSAGE_MAP()
3 afx_msg void OnRevdataWPARAM wParam=0,LPARAM lParam=0);// .h
4 OnRevdataWPARAM wParam=0,LPARAM lParam=0);
{}

#4


楼上说的对 消息映射要做好 做好后还是不行 看看消息是不是定义重复(冲突)了

#5


引用 3 楼 schlafenhamster 的回复:
WM_RECVDATA 这个是自定义消息 要加3个地方:
1 #define WM_RECVDATA WM_USER+101  // .h
2 BEGIN_MESSAGE_MAP(CxxxxDlg, CDialog) // .cpp
//{{AFX_MSG_MAP(CxxxxDlg)
ON_MESSAGE(WM_RECVDATA,OnRevdata)
//}}AFX_MSG_MAP
 END_MESSAGE_MAP()
3 afx_msg void OnRevdataWPARAM wParam=0,LPARAM lParam=0);// .h
4 OnRevdataWPARAM wParam=0,LPARAM lParam=0);
{}
嗯 这些我都加了,我在OnRecvData中用messagebox中提示了,进到这个函数了,但是后面没有效果

#6


CZZParameter dlg;//子对话框类  你这个是模态的,要doModal才能更新
改用非模态对话框。(用指针)

#7


我感觉你那个postmessage换成sendmessage是不是好些。你post之后立即又去接受数据,而OnReceive还没执行,那recvBuf[500]里面的数据就变了

#1


线程发消息给主线程,然后主线程操作子对话框控件

#2


引用 1 楼 oyljerry 的回复:
线程发消息给主线程,然后主线程操作子对话框控件
我这个现在就是主线程操作子对话框控件吧,但是貌似没有更新

#3


WM_RECVDATA 这个是自定义消息 要加3个地方:
1 #define WM_RECVDATA WM_USER+101  // .h
2 BEGIN_MESSAGE_MAP(CxxxxDlg, CDialog) // .cpp
//{{AFX_MSG_MAP(CxxxxDlg)
ON_MESSAGE(WM_RECVDATA,OnRevdata)
//}}AFX_MSG_MAP
 END_MESSAGE_MAP()
3 afx_msg void OnRevdataWPARAM wParam=0,LPARAM lParam=0);// .h
4 OnRevdataWPARAM wParam=0,LPARAM lParam=0);
{}

#4


楼上说的对 消息映射要做好 做好后还是不行 看看消息是不是定义重复(冲突)了

#5


引用 3 楼 schlafenhamster 的回复:
WM_RECVDATA 这个是自定义消息 要加3个地方:
1 #define WM_RECVDATA WM_USER+101  // .h
2 BEGIN_MESSAGE_MAP(CxxxxDlg, CDialog) // .cpp
//{{AFX_MSG_MAP(CxxxxDlg)
ON_MESSAGE(WM_RECVDATA,OnRevdata)
//}}AFX_MSG_MAP
 END_MESSAGE_MAP()
3 afx_msg void OnRevdataWPARAM wParam=0,LPARAM lParam=0);// .h
4 OnRevdataWPARAM wParam=0,LPARAM lParam=0);
{}
嗯 这些我都加了,我在OnRecvData中用messagebox中提示了,进到这个函数了,但是后面没有效果

#6


CZZParameter dlg;//子对话框类  你这个是模态的,要doModal才能更新
改用非模态对话框。(用指针)

#7


我感觉你那个postmessage换成sendmessage是不是好些。你post之后立即又去接受数据,而OnReceive还没执行,那recvBuf[500]里面的数据就变了