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
我这个现在就是主线程操作子对话框控件吧,但是貌似没有更新
#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);
{}
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
嗯 这些我都加了,我在OnRecvData中用messagebox中提示了,进到这个函数了,但是后面没有效果
#6
CZZParameter dlg;//子对话框类 你这个是模态的,要doModal才能更新
改用非模态对话框。(用指针)
改用非模态对话框。(用指针)
#7
我感觉你那个postmessage换成sendmessage是不是好些。你post之后立即又去接受数据,而OnReceive还没执行,那recvBuf[500]里面的数据就变了
#1
线程发消息给主线程,然后主线程操作子对话框控件
#2
我这个现在就是主线程操作子对话框控件吧,但是貌似没有更新
#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);
{}
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
嗯 这些我都加了,我在OnRecvData中用messagebox中提示了,进到这个函数了,但是后面没有效果
#6
CZZParameter dlg;//子对话框类 你这个是模态的,要doModal才能更新
改用非模态对话框。(用指针)
改用非模态对话框。(用指针)
#7
我感觉你那个postmessage换成sendmessage是不是好些。你post之后立即又去接受数据,而OnReceive还没执行,那recvBuf[500]里面的数据就变了