首先我是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表格那样的风格,就是可以指定行列,有网格线的
{
// 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表格那样的风格,就是可以指定行列,有网格线的
gridctrl
http://www.codeproject.com/Articles/8/MFC-Grid-control-2-27
{
// 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);
}我把程序改成这样,但无法通过
{
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有低级错误请多多指点哦
{
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();
}不好意思呀,如果这样就可以通过,但是点击确定后,添加房间的窗口时消失了,但主窗口里的列表还是空的
返回主窗口后,在CShangweijiDlg::OnTianjia_Dele_Room() 函数中对话框关闭后得到要删除的房间变量,在列表控件里面找到这一行,然后执行列表控件的删除行的函数,然后UpdateData(true)更新控件的内容显示
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, "是");