1、List Control控件创建
(1)采用拖拽控件方式,增加List Control控件,并且绑定变量m_list,如下是初始化方法,建立一个3列表格,带复选框
m_list.InsertColumn(0, _T(" "),LVCFMT_LEFT,25);
m_list.InsertColumn(1, _T("序号"),LVCFMT_CENTER,100);
m_list.InsertColumn(2, _T("Value"), LVCFMT_CENTER,100);
m_list.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES);
2、实现双击编辑指定内容,双击空白处增加一行
(1)首先增加一个Edit编辑框,并且绑定变量m_Edit,初始化隐藏;
m_Edit.ShowWindow(SW_HIDE);
(2)添加int型全局变量m_ListRow 和m_ListCol ,用于保存双击时选中的行和列号,并初始化为-1(未选中状态);
m_ListRow =-1;
m_ListCol =-1;
(3)为List Control控件添加NM_DBLCLK消息响应,并添加代码如下:
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
CRect rc;
CString strTemp;
NM_LISTVIEW *pNMListView = (NM_LISTVIEW *)pNMHDR;
m_ListRow = pNMListView->iItem;
m_ListCol = pNMListView->iSubItem;
if (pNMListView->iItem == -1) //选择空白处,添加一行,并设置焦点为最后一行,第二列
{
m_ListRow = m_KMeansResultList.GetItemCount();
strTemp.Format(_T("%d"), m_ListRow + 1);
m_list.InsertItem(m_ListRow,strTemp);
m_list.SetItemState(m_ListRow, LVIS_SELECTED | LVIS_FOCUSED,LVIS_SELECTED | LVIS_FOCUSED);
m_list.EnsureVisible(m_ListRow, FALSE);
}
if (m_ListCol != 0) // 选择子项
{
m_list.GetSubItemRect(m_ListRow, m_ListCol, LVIR_LABEL, rc);
m_Edit.SetParent(&m_list);
m_Edit.MoveWindow(rc);
m_Edit.SetWindowText(m_list.GetItemText(m_ListRow, m_ListCol));
m_Edit.ShowWindow(SW_SHOW);
m_Edit.SetFocus();//设置Edit焦点
m_Edit.ShowCaret();//显示光标
m_Edit.SetSel(0, -1);//全选
}
*pResult = 0;
(4)为Edit Control控件添加EN_KILLFOCUS消息响应,并添加代码如下:
CString str;
m_Edit.GetWindowText(str);
m_list.SetItemText(m_ListRow, m_ListCol, str);
m_Edit.ShowWindow(SW_HIDE);