首先在资源视图的主界面添加一个editcontrol编辑框控件
再添加主界面ListControl表格控件
类似这样:
再设置listcontrol表格控件的属性和editcontrol编辑框属性
在.h的头文件里面定义CListCtrl m_list; CEdit m_edit;
CListCtrl m_list;
CEdit m_edit;
将表格控件listcontrol、编辑框editcontrol控件和控件ID关联起来
DDX_Control(pDX, IDC_EDIT_LIST, m_edit);
DDX_Control(pDX, IDC_LIST, m_list);
//双击编辑表格
void COptical_fiber_polishingDlg::OnDblclkList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
CRect rc;
m_Row = pNMListView->iItem;//获得选中的行
m_Col = pNMListView->iSubItem;//获得选中列
if (pNMListView->iSubItem == 0 || pNMListView->iSubItem == 4) //如果选择的是子项;
{
}
else
{
m_list.GetSubItemRect(m_Row, m_Col, LVIR_LABEL, rc);//获得子项的RECT;
m_edit.SetParent(&m_list);//转换坐标为列表框中的坐标
m_edit.MoveWindow(rc);//移动Edit到RECT坐在的位置;
m_edit.SetWindowText(m_list.GetItemText(m_Row, m_Col));//将该子项中的值放在Edit控件中;
m_edit.ShowWindow(SW_SHOW);//显示Edit控件;
m_edit.SetFocus();//设置Edit焦点
m_edit.ShowCaret();//显示光标
m_edit.SetSel(-1);//将光标移动到最后
}
*pResult = 0;
}
void COptical_fiber_polishingDlg::OnKillfocusEditList()
{
// TODO: 在此添加控件通知处理程序代码
CString str;
m_edit.GetWindowText(str); //得到用户输入的新的内容
m_list.SetItemText(m_Row, m_Col, str); //设置编辑框的新内容
m_edit.ShowWindow(SW_HIDE); //应藏编辑框
}
//表添加行
void COptical_fiber_polishingDlg::OnBnClickedAdd()
{
// TODO: 在此添加控件通知处理程序代码
// TODO: 在此添加控件通知处理程序代码
// 在列表视图控件中插入列表项,并设置列表子项文本
int i = m_list.GetItemCount();
if (i == 0) {
m_list.InsertItem(0, L"1");
m_list.SetItemText(0, 1, L"");
m_list.SetItemText(0, 2, L"");
m_list.SetItemText(0, 3, L"");
}
else
{
int i2 = i + 1;
CString str;
str.Format(L"%d", i2);
m_list.InsertItem(i, (LPCTSTR)str);
m_list.SetItemText(i, 1, L"");
m_list.SetItemText(i, 2, L"");
m_list.SetItemText(i, 3, L"");
}
}
//表删除行
void COptical_fiber_polishingDlg::OnBnClickedDelete()
{
// TODO: 在此添加控件通知处理程序代码
int nItem = m_list.GetSelectionMark();
if (nItem != -1)
{
int result = MessageBox(L"确认删除当前选中行的数据?", L"温馨提示",MB_YESNO | MB_ICONINFORMATION);//弹窗提示
switch (result) {
case IDYES:
{//点击YES按钮的具体实现功能
m_list.DeleteItem(nItem);
break;
}
case IDNO:
break;
}
}
else {
AfxMessageBox(L"请选择要删除的行!");
}
}