C++ ListControl控件使用、编辑、增加一行

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);  
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页