HWND m_hDlg;//对话框句柄 用于在线程中更新对话框视图线程函数中向对话框发送改变列表视图的消息
UINT _ListenClient(LPVOID lParam)
{
CRCSDlg* dlg=(CRCSDlg*)lParam;
m_hDlg=dlg->GetSafeHwnd();
……
::SendMessage(m_hDlg,WM_UPDATEDLG,NULL,NULL); ……
return 0;
}afx_msg LONG UpdateList(WPARAM wParam,LPARAM lParam);
ON_MESSAGE(WM_UPDATEDLG,UpdateList)LONG CRCSDlg::UpdateList(WPARAM wParam,LPARAM lParam)
{ ……
……
AfxMessageBox(strMac);只显示这个对话框 其他对列表的操作不能实现(在未用线程时测试没有问题可以正常显示各种列表视图的变化)…………
}
UINT _ListenClient(LPVOID lParam)
{
CRCSDlg* dlg=(CRCSDlg*)lParam;
m_hDlg=dlg->GetSafeHwnd();
……
::SendMessage(m_hDlg,WM_UPDATEDLG,NULL,NULL); ……
return 0;
}afx_msg LONG UpdateList(WPARAM wParam,LPARAM lParam);
ON_MESSAGE(WM_UPDATEDLG,UpdateList)LONG CRCSDlg::UpdateList(WPARAM wParam,LPARAM lParam)
{ ……
……
AfxMessageBox(strMac);只显示这个对话框 其他对列表的操作不能实现(在未用线程时测试没有问题可以正常显示各种列表视图的变化)…………
}
{
CString str,strMac;
//struct in_addr* ptr;
struct hostent * remoteHostent;
int nRemoteAddr=clientaddr[clientNum].sin_addr.S_un.S_addr;//inet_addr();
remoteHostent=(struct hostent*)malloc(sizeof(struct hostent));
remoteHostent=gethostbyaddr((char*)&nRemoteAddr,4,AF_INET);
unsigned char macAddress[6]; //获取MAC地址
ULONG macAddLen=6;
int iRet=SendARP(nRemoteAddr, (unsigned long)NULL,(PULONG)&macAddress, &macAddLen);
strMac.Format("%02X-%02X-%02X-%02X-%02X-%02X",macAddress[0],macAddress[1],
macAddress[2],macAddress[3],macAddress[4],macAddress[5]);
int a=clientaddr[clientNum].sin_addr.S_un.S_un_b.s_b1;
int b=clientaddr[clientNum].sin_addr.S_un.S_un_b.s_b2;
int c=clientaddr[clientNum].sin_addr.S_un.S_un_b.s_b3;
int d=clientaddr[clientNum].sin_addr.S_un.S_un_b.s_b4;
str.Format("%d.%d.%d.%d",a,b,c,d);
//iItem是行,iSubItem是列
lvi.mask=LVIF_TEXT|LVIF_IMAGE;
lvi.iSubItem=1; lvi.pszText=remoteHostent->h_name;
lvi.iItem=clientNum;
lvi.iImage=0;
m_list.InsertItem(&lvi);
m_list.SetItemText(0,1,remoteHostent->h_name); lvi.iSubItem=2;
strcpy(lvi.pszText,str);
lvi.iItem=clientNum;
lvi.iImage=1;
m_list.InsertItem(&lvi);
m_list.SetItemText(0,2,str); lvi.iSubItem=3;
strcpy(lvi.pszText,strMac);
lvi.iItem=clientNum;
lvi.iImage=2;
m_list.InsertItem(&lvi);
m_list.SetItemText(0,3,strMac);
//m_list.Invalidate(TRUE);
AfxMessageBox(strMac);
//delete szMac;
return 0;
}
你这发了个什么消息?2个NULL,什么意思?
而且插入ListCtrl没必要那么麻烦,这样就行了
m_list.InsertItem(0,str);
m_list.SetItemText(0,1,strMac);
对于列表视图的操作没有任何问题的,我测试通过!
::SendMessage(m_hDlg,WM_UPDATEDLG,NULL,NULL);
后面两个NULL分别对应wParam lParam,我这里没有传递参数,全部用的是全局变量,这里应该没问题!
AfxMessageBox(strMac);(这个函数是对话框类函数)这个对话框正常弹出说明发送消息是成功的,关键是没有视图的变化!