MFC主窗口ShangweijiDlg有个列表控件,还有个添加删除房间按钮,按钮消息响应函数如下:
点击该按钮,弹出新窗口CTianJia_Delet TianjiaDelet_room添加删除房间窗口,该窗口上有个IP地址控件,该程序目的将将IP地址控件里面的IP转化成字符串显示在特定位置列表里,但不知道为什么错了void CShangweijiDlg::OnTianjia_Dele_Room() //添加删除房间按钮的响应函数
{
CTianJia_Delet TianjiaDelet_room; //添加删除房间窗口 
DWORD tianjiadeletip;//添加或删除的房间的IP地址 
CString strip;
(TianjiaDelet_room.m_tianjiadeletip).GetAddress(tianjiadeletip);
    BYTE IP0,IP1,IP2,IP3;
    (TianjiaDelet_room.m_tianjiadeletip).GetAddress(&IP0,&IP1,&IP2,&IP3);
    strip.Format("%d.%d.%d.%d",IP0,IP1,IP2,IP3);
      if(IDOK==TianjiaDelet_room.DoModal()) //TianjiaDelet_room窗口按下IDOK键。即确定按纽
   {
   ((CListCtrl  *)GetDlgItem(IDC_LIST_ROOM))->InsertItem(0,TianjiaDelet_room.m_tianjiadeletroom);
   //这里是将第1行第二列的值设置为所添加或删除房间的IP地址
   ((CListCtrl  *)GetDlgItem(IDC_LIST_ROOM))->SetItemText(0, 1,strip); 
     }
}

解决方案 »

  1.   


    其中我的IP控件关联变量m_tianjiadeletip
      

  2.   

    int GetAddress(
       BYTE& nField0,
       BYTE& nField1,
       BYTE& nField2,
       BYTE& nField3 
    );
    参数传的都是引用,不是地址,这样就可以了
    (TianjiaDelet_room.m_tianjiadeletip).GetAddress(IP0,IP1,IP2,IP3);
      

  3.   

    我直接将
    int GetAddress(
      BYTE& nField0,
      BYTE& nField1,
      BYTE& nField2,
      BYTE& nField3  
    );加在void CShangweijiDlg::OnTianjia_Dele_Room(){}这个大函数里面,编译通过,但运行时点击按钮会出错???????
      

  4.   

    BYTE ip0, ip1, ip2, ip3;
    m_ip.GetAddress(ip0, ip1, ip2, ip3);
    CString strMsg;
    strMsg.Format(_T("%d.%d.%d.%d"), ip0, ip1, ip2, ip3);
    MessageBox(strMsg);我的代码,验证过OK,你调试一下,看哪句报错了
      

  5.   

    没报错,就是会跳出终止,重试,忽略的对话框,还有
    int GetAddress(
      BYTE& nField0,
      BYTE& nField1,
      BYTE& nField2,
      BYTE& nField3   
    );这函数你是加在哪里?
      

  6.   

    void CShangweijiDlg::OnTianjia_Dele_Room() //添加删除房间按钮的响应函数
    {
    CTianJia_Delet TianjiaDelet_room; //添加删除房间窗口 
    DWORD tianjiadeletip;//添加或删除的房间的IP地址 
    CString strip;
    (TianjiaDelet_room.m_tianjiadeletip).GetAddress(tianjiadeletip);
     (TianjiaDelet_room.m_tianjiadeletip).GetWindowText(strip);
          if(IDOK==TianjiaDelet_room.DoModal()) //TianjiaDelet_room窗口按下IDOK键。即确定按纽
       {
         //第一列用InSertItem(),插入所添加或删除的房间号
       ((CListCtrl  *)GetDlgItem(IDC_LIST_ROOM))->InsertItem(0,TianjiaDelet_room.m_tianjiadeletroom);
         //这里是将第1行第二列的值设置为所添加或删除房间的IP地址
       ((CListCtrl  *)GetDlgItem(IDC_LIST_ROOM))->SetItemText(0, 1,strip); 
         }
    }兄弟,还是没报错,就是会跳出终止,重试,忽略的对话框
      

  7.   


    CIPAddressCtrl* pIPCtrl = (CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS);
    if ( pIPCtrl != NULL )
    {
    pIPCtrl->SetAddress(10, 12, 1, 106);
    ULONG nIp;
    pIPCtrl->GetAddress(nIp);
    char szBufIP[32];
    sprintf(szBufIP, "%d.%d.%d.%d", (nIp&0x000000ff) >> 0, (nIp&0x0000ff00) >> 8, (nIp&0x00ff0000) >> 16, (nIp&0xff000000) >> 24 );
    }
      

  8.   


    我给你发的是GetAddress函数申明的原型,不是代码,你的代码这样改改就可以了
    void CShangweijiDlg::OnTianjia_Dele_Room() //添加删除房间按钮的响应函数
    {
    CTianJia_Delet TianjiaDelet_room; //添加删除房间窗口  
    DWORD tianjiadeletip;//添加或删除的房间的IP地址  
    CString strip;
    (TianjiaDelet_room.m_tianjiadeletip).GetAddress(tianjiadeletip);
      BYTE IP0,IP1,IP2,IP3;
      (TianjiaDelet_room.m_tianjiadeletip).GetAddress(IP0,IP1,IP2,IP3);  //这个地方是引用,不是代码
      strip.Format("%d.%d.%d.%d",IP0,IP1,IP2,IP3);
      if(IDOK==TianjiaDelet_room.DoModal()) //TianjiaDelet_room窗口按下IDOK键。即确定按纽
      {
      ((CListCtrl *)GetDlgItem(IDC_LIST_ROOM))->InsertItem(0,TianjiaDelet_room.m_tianjiadeletroom);
      //这里是将第1行第二列的值设置为所添加或删除房间的IP地址
      ((CListCtrl *)GetDlgItem(IDC_LIST_ROOM))->SetItemText(0, 1,strip);  
      }
    }
      

  9.   

    我发现把这句//(TianjiaDelet_room.m_tianjiadeletip).GetAddress(IP0,IP1,IP2,IP3);//这个地方是引用,不是地址    
    注释起来,就不会出错,但是结果将无法更新,我的QQ234856395
      

  10.   

    TianjiaDelet_room是个对话框?
    你都没有创建就调用其控件?
    你还是先做点简单例子熟悉一下具体操作吧
      

  11.   


    CTianJia_Delet TianjiaDelet_room; //添加删除房间窗口
    这样不算是创建吗?
     ((CListCtrl  *)GetDlgItem(IDC_LIST_ROOM))->InsertItem(0,TianjiaDelet_room.m_tianjiadeletroom);我把TianjiaDelet_room对话框里的一个编辑框里的值传递过去式可以实现的;
    不好意思哦,新手,因为任务紧急所以就边做边学哦
      

  12.   

    CTianJia_Delet TianjiaDelet_room; //添加删除房间窗口 
    你的这个变量都没见你初始化,你去取值,当然就会崩溃.
      

  13.   


    真的很感谢你们的热心,只是我基础太差了,看来我要好好从基础学起,只是TianjiaDelet_room.DoModal()不就是调用对话框?if(IDOK==TianjiaDelet_room.DoModal())
      

  14.   


    TianjiaDelet_room是一个对话框类,如何初始化?是TianjiaDelet_room.DoModal()吗?
      

  15.   

    TianjiaDelet_room.DoModal()是调用
    不过其上的控件只有在对话框显示的时候才有效
    调用之前和销毁之后都不能被访问