首先我是MFC中基本对话框写的,主窗口是IDD_SHANGWEIJI_DIALOG,在主窗口上有个“添加删除房间”按钮,响应函数为void CShangweijiDlg::OnTianjia_Dele_Room() //添加删除房间按钮的响应函数
{
// TODO: Add your control notification handler code here
CTianJia_Delet TianjiaDelet_room; 
TianjiaDelet_room.DoModal();

}点击它弹出另一个IDD_TianJia_Dele窗口,窗口上有个添加房间的编辑框IDC_EDIT_Room和确定按钮,确定按钮响应函数void CTianJia_Delet::OnOK_TianjiaRoom() 
{
GetDlgItemText(IDC_EDIT_Room,m_TianjiaDeletRoom);
CString strTemp;
//获得已有的数据
GetDlgItemText(IDC_LISTROOM,strTemp);//IDC_LISTROOM是主窗口主窗口是IDD_SHANGWEIJI_DIALOG上得一个列表 控件,我的目的上在点击确定后将添加的房间显示到主窗口的列表上,但是无论我怎么点击,弹出的IDD_TianJia_Dele添加窗口都无反应不会消失,列表也无反应
strTemp+="\r\n";
strTemp+=m_TianjiaDeletRoom;
//显示所有接收到的数据
SetDlgItemText(IDC_LISTROOM,strTemp);
}
还有列表控制怎么改成像EXCEL表格那样的风格,就是可以指定行列,有网格线的

解决方案 »

  1.   

    要和excel一样那可麻烦了
    gridctrl
    http://www.codeproject.com/Articles/8/MFC-Grid-control-2-27
      

  2.   

    void CTianJia_Delet::OnOK_TianjiaRoom() 
    {
    // TODO: Add your control notification handler code here

    GetDlgItemText(IDC_EDIT_Room,m_TianjiaDeletRoom);
    //((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->GetAddress(m_TianjiaDletIp);
    HWND zhu_hwnd=GetParent(m_hWnd);
    HWND IDC_LISTROOM=zhu_hwnd::GetDlgItem(IDC_LISTROOM);
    CString strTemp;
    //获得已添加的房间
    GetDlgItemText(IDC_LISTROOM,strTemp);
    strTemp+="\r\n";
    strTemp+=m_TianjiaDeletRoom;
    //在主窗口的列表框里显示所有添加的房间
    SetDlgItemText(IDC_LISTROOM,strTemp);
    }我把程序改成这样,但无法通过
      

  3.   

    void CTianJia_Delet::OnOK_TianjiaRoom() 
    {
    GetDlgItemText(IDC_EDIT_Room,m_TianjiaDeletRoom);
    HWND zhu_hwnd=::GetParent(m_hWnd);//获得主窗口,但去掉::就错误,不知道为什么
    CString strTemp;
    //获得已添加的房间
    //GetDlgItemText(zhu_hwnd.IDC_LISTROOM,strTemp);//对获得的主窗口上的一个控件进行操作,但错误,不知道为什么
    GetDlgItemText(zhu_hwnd.m_listroom,strTemp);//对获得的主窗口上的一个控件进行操作,但还是错误,不知道为什么,m_listroom是我为主窗口那个列表控件添加的control变量 strTemp+="\r\n";
    strTemp+=m_TianjiaDeletRoom;
    //在主窗口的列表框里显示所有添加的房间
    //SetDlgItemText(zhu_hwnd.IDC_LISTROOM,strTemp);
    SetDlgItemText(zhu_hwnd.m_listroom,strTemp);
    CDialog::OnOK();
    }不好意思呀,新手写MFC有低级错误请多多指点哦
      

  4.   

    void CTianJia_Delet::OnOK_TianjiaRoom()  

    GetDlgItemText(IDC_EDIT_Room,m_TianjiaDeletRoom);
    HWND zhu_hwnd=::GetParent(m_hWnd);//获得主窗口,但去掉::就错误,不知道为什么
    CString strTemp;
    //获得已添加的房间
    GetDlgItemText(IDC_LISTROOM,strTemp);
    strTemp+="\r\n";
    strTemp+=m_TianjiaDeletRoom;
    //在主窗口的列表框里显示所有添加的房间
    SetDlgItemText(IDC_LISTROOM,strTemp);
    CDialog::OnOK();
    }不好意思呀,如果这样就可以通过,但是点击确定后,添加房间的窗口时消失了,但主窗口里的列表还是空的
      

  5.   

    在建立CTianJia_Delet对象的方法里面加上UpdateData(true),要把信息更新到控件上。同时你还得把CTianJia_Delet对话框里面的信息添加上列表控件中,然后更新数据UpdateData
      

  6.   

    在建立CTianJia_Delet对象的方法里面加上UpdateData(true),要把信息更新到控件上。同时你还得把CTianJia_Delet对话框里面的信息添加上列表控件中,然后更新数据UpdateData
      

  7.   

    点击删除按钮后,建立CTianJia_Delet对话框A,A对话框的编辑框都关联相关变量。确定按钮的相应函数中要有CDialog::ONOK()函数,这样就能返回主窗口了。
      返回主窗口后,在CShangweijiDlg::OnTianjia_Dele_Room() 函数中对话框关闭后得到要删除的房间变量,在列表控件里面找到这一行,然后执行列表控件的删除行的函数,然后UpdateData(true)更新控件的内容显示
      

  8.   


    CTianJia_Delet TianjiaDelet_room;  
          if(IDOK==TianjiaDelet_room.DoModal()) //TianjiaDelet_room窗口按下IDOK键。即确定按纽
       {
       //CListCtrl在插入行时,要先用InSertItem()然后再用SetItemText()
       ((CListCtrl  *)GetDlgItem(IDC_LIST_ROOM))->InsertItem(0,TianjiaDelet_room.m_TianjiaDeletRoom);//第一列要用InSertItem()
       ((CListCtrl  *)GetDlgItem(IDC_LIST_ROOM))->m_listroom.SetItemText(0, 1,"ABC"); 
       //更改第二列的值时才用SetItemText(),这里是将第1行第二列的值设置为"ABC"  
    }
    }但error C2039: 'm_listroom' : is not a member of 'CListCtrl',可是m_listroom我确实关联到列表控制了,我还用它初始化列表呢,下面都正确
    void CShangweijiDlg::LIST_ROOM_Init()//对房间表格初始化
    {
    //设置格式
    m_listroom.ModifyStyle( 0, LVS_REPORT );               // 报表模式   
    m_listroom.SetExtendedStyle(m_listroom.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);  // 间隔线+行选中 
    //插入表头
    m_listroom.InsertColumn(0,"房间号");  
    m_listroom.InsertColumn(1,"IP地址");
    m_listroom.InsertColumn(2,"是否开启监控");  
    ////设置列宽 
    CRect rect;  
    m_listroom.GetClientRect(rect); //获得当前客户区信息   
    m_listroom.SetColumnWidth(0, rect.Width() / 3); //设置列的宽度。   
    m_listroom.SetColumnWidth(1, rect.Width() / 3);  
    m_listroom.SetColumnWidth(2, rect.Width() / 3); 
    //插入行数据
    m_listroom.InsertItem(0,"3#305");  
    m_listroom.SetItemText(0, 1, "192.168.0.2");  
    m_listroom.SetItemText(0, 2, "是");