ListControl数据修改
1.创建对话框及必要的控件
创建对话框,
在对话框中拖入一个listControl控件,命名为m_ROIsearchresult,风格:report;
添加一个editControl控件,命名为m_edit_pos,默认是Control变量;
2.表格格式设计
DWORD dwStyle = m_ROIsearchresult.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT; //选中行高亮
dwStyle |= LVS_EX_GRIDLINES; //分割新
// dwStyle |= LVS_SINGLESEL; // 添加复选框
m_ROIsearchresult.SetExtendedStyle(dwStyle);
m_ROIsearchresult.InsertColumn(0, _T("ID"), LVCFMT_CENTER, 50);
m_ROIsearchresult.InsertColumn(1, _T("AVG值"), LVCFMT_CENTER, 100);
m_ROIsearchresult.InsertColumn(2, _T("检测上限"), LVCFMT_CENTER, 100);
m_ROIsearchresult.InsertColumn(3, _T("检测下限"), LVCFMT_CENTER, 100);
//cell height
CImageList m_hight;
m_hight.Create(1, 25, TRUE | ILC_COLOR32, 1, 0); //设置表格的高度
m_ROIsearchresult.SetImageList(&m_hight, LVSIL_SMALL);
//font style
CFont m_font;
m_font.CreatePointFont(60, _T("宋体"));
m_ROIsearchresult.SetFont(&m_font);
3.表格数据修改
①双击表格选中cell实现数值修改
void ROIAdjust::OnNMDblclkListRoiSearch(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
// MessageBox(_T("double click"));
CRect rc;
NM_LISTVIEW *pNMListView = (NM_LISTVIEW *)pNMHDR;
m_Row = pNMListView->iItem;//每一行的item从零开始,双击选中行号
m_Col = pNMListView->iSubItem;//每一行中的列就是SubItem也是从零开始,获得选中列号
if (m_Col != -1)//选择子项
{
m_ROIsearchresult.GetSubItemRect(m_Row, m_Col, LVIR_LABEL, rc);
m_edit_pos.SetParent(&m_ROIsearchresult);
m_edit_pos.MoveWindow(rc);
m_edit_pos.SetWindowText(m_ROIsearchresult.GetItemText(m_Row, m_Col));//设置选中框的数值(由用户输入 )
str_ListValTemp = m_ROIsearchresult.GetItemText(m_Row, m_Col);//获取选中框中的数据
m_edit_pos.ShowWindow(SW_SHOW);//显示在窗口中
m_edit_pos.SetFocus();//设置edit焦点
m_edit_pos.ShowCaret();//显示光标
m_edit_pos.SetSel(-1);
}
*pResult = 0;
}
②cell实现数值修改后保存
此时只能实现edit中的数值修改 不能实现保存,所以在editcontrol控件中添加killfocus功能函数:
void ROIAdjust::OnEnKillfocusEdit1() // 关闭编辑框内容
{
// TODO: 在此添加控件通知处理程序代码
m_edit_pos.GetWindowText(str_ListValTemp);
m_ROIsearchresult.SetItemText(m_Row,m_Col,str_ListValTemp);
}