列表控件是基本经常用到的控件,这里总结一下,方便以后使用。
需要设置的属性
- View->Report:一般为报表
- Edit Labels->TRUE:控件可以重命名
- 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();