CListCtrl列表控件的基本用法

列表控件是基本经常用到的控件,这里总结一下,方便以后使用。

需要设置的属性

  1. View->Report:一般为报表
  2. Edit Labels->TRUE:控件可以重命名
  3. Always Show Selection->TRUE:设置选中焦点

变量绑定控件

CListCtrl m_list;//列表控件
	
void CControlDlg::DoDataExchange(CDataExchange* pDX)
{
	CAcUiDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST, m_list);
}

设置风格

m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT);//可以选一行;
m_list.SetExtendedStyle(LVS_EX_GRIDLINES);//给列表加格;
m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);//前面有勾选格
m_list.SetExtendedStyle(LVS_EX_HEADERDRAGDROP);//表头可以拖拽

插入列

m_list.InsertColumn(0,_T("姓名"),LVCFMT_CENTER,80);
m_list.InsertColumn(1,_T("性别"),LVCFMT_CENTER,80);

添加项

m_list.InsertItem(0,_T("张三"));
m_list.SetItemText(0,1,_T("男"));

得到选择项

POSITION pos = m_list.GetFirstSelectedItemPosition();
int nSel = m_list.GetNextSelectedItem(pos);
if (nSel < 0)
{
	AfxMessageBox(_T("请选择删除项!"));
}

控件消息函数参数

void CPreviewDlg::OnItemchangedList2(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
	
	if(pNMLV->uChanged==LVIF_STATE)
	{
		if(pNMLV->uNewState & LVIS_SELECTED)
		{
			int nItem = pNMLV->iItem;//当前选择的列表控件的行;
		}
	}

	*pResult = 0;
}

设置某行被选中

属性:Always Show Selection->TRUE

m_list.SetItemState(nIndexRow, LVNI_FOCUSED | LVIS_SELECTED, LVNI_FOCUSED | LVIS_SELECTED);
m_list.SetFocus();

得到所有列的个数

int nColumnCount = m_list.GetHeaderCtrl()->GetItemCount();

获取列名称

LVCOLUMN col;
wchar_t buffer[128];
col.mask = LVCF_TEXT;
col.cchTextMax = 128;
col.pszText = buffer;
m_list.GetColumn(3, &col);
MessageBox(buffer);

选中某一行并滚轮滚动到某一行

属性:Always Show Selection->TRUE

int nCount = m_list.GetItemCount();  
m_list.SetItemState(nCount-1, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);  
m_list.EnsureVisible(nCount-1, FALSE);    
m_list.SetFocus();

你可能感兴趣的:(MFC)