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);只显示这个对话框 其他对列表的操作不能实现(在未用线程时测试没有问题可以正常显示各种列表视图的变化)…………

解决方案 »

  1.   

    LONG CRCSDlg::UpdateList(WPARAM wParam,LPARAM lParam)
    {


    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.   

    ::SendMessage(m_hDlg,WM_UPDATEDLG,NULL,NULL); 
    你这发了个什么消息?2个NULL,什么意思?
    而且插入ListCtrl没必要那么麻烦,这样就行了
    m_list.InsertItem(0,str);    
    m_list.SetItemText(0,1,strMac);  
      

  3.   

    我都晕了,到底哪个对哪个帖子,楼主问了两个问题??macAddress这个问题也是?
      

  4.   

    调试看看clientNum的值是多少。
      

  5.   

    mac转化问题我已经解决了! 
    对于列表视图的操作没有任何问题的,我测试通过!
    ::SendMessage(m_hDlg,WM_UPDATEDLG,NULL,NULL); 
    后面两个NULL分别对应wParam lParam,我这里没有传递参数,全部用的是全局变量,这里应该没问题!
    AfxMessageBox(strMac);(这个函数是对话框类函数)这个对话框正常弹出说明发送消息是成功的,关键是没有视图的变化!
      

  6.   

    感谢ElySium greatws的多次帮助!