下面我将详细讲解MFC列表控件CListCtrl的使用方法示范。
1. 创建CListCtrl控件
要使用CListCtrl控件,首先需要在对应的对话框或视图中添加该控件。可以通过如下步骤进行操作:
- 在资源视图中找到需要添加控件的对话框或视图。
- 右键单击该对话框或视图,并选择“添加类”。
- 在弹出的“添加类”对话框中选择“MFC Class from the ActiveX Control”,然后点击“添加”。
- 选择“Microsoft ListView Control 6.0”(或其他版本),并输入该控件的名称。
- 点击“完成”,即可成功添加CListCtrl控件。
2. 添加列和行
要使用CListCtrl控件显示数据,需要先添加对应的列和行。可以通过如下代码添加列和行:
// 添加列
m_ListCtrl.InsertColumn(0, _T("姓名"), LVCFMT_LEFT, 100);
m_ListCtrl.InsertColumn(1, _T("性别"), LVCFMT_LEFT, 100);
m_ListCtrl.InsertColumn(2, _T("年龄"), LVCFMT_LEFT, 100);
// 添加行
m_ListCtrl.InsertItem(0, _T("张三"));
m_ListCtrl.SetItemText(0, 1, _T("男"));
m_ListCtrl.SetItemText(0, 2, _T("18"));
m_ListCtrl.InsertItem(1, _T("李四"));
m_ListCtrl.SetItemText(1, 1, _T("男"));
m_ListCtrl.SetItemText(1, 2, _T("25"));
m_ListCtrl.InsertItem(2, _T("小芳"));
m_ListCtrl.SetItemText(2, 1, _T("女"));
m_ListCtrl.SetItemText(2, 2, _T("21"));
在代码中,通过InsertColumn方法添加列,并指定列的宽度和对齐方式。通过InsertItem和SetItemText方法添加行,并设置对应列的文本内容。
3. 响应事件
CListCtrl控件支持各种事件,可以通过添加对应的消息映射函数来响应这些事件,例如单击、双击、右键单击等事件。以单击事件为例,代码可以如下所示:
void CMyDlg::OnLvnItemActivateList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
int nItem = pNMItemActivate->iItem;
if (nItem < 0)
{
return;
}
CString strName = m_ListCtrl.GetItemText(nItem, 0);
CString strSex = m_ListCtrl.GetItemText(nItem, 1);
CString strAge = m_ListCtrl.GetItemText(nItem, 2);
MessageBox(strName + _T(", ") + strSex + _T(", ") + strAge, _T("信息"), MB_OK);
*pResult = 0;
}
在代码中,通过添加OnLvnItemActivateList消息映射函数来响应单击事件。在函数内部,获取当前选中的行及对应的文本内容,并通过MessageBox显示出来。
示例1:多选列表
以下代码示例演示如何实现允许用户选择多个行的列表:
// 设置列表可以选择多个行
m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
m_ListCtrl.SetExtendedStyle(m_ListCtrl.GetExtendedStyle() | LVS_EX_CHECKBOXES);
// 获取选中的行
int nItem = -1;
while ((nItem = m_ListCtrl.GetNextItem(nItem, LVNI_SELECTED)) != -1)
{
CString strName = m_ListCtrl.GetItemText(nItem, 0);
CString strSex = m_ListCtrl.GetItemText(nItem, 1);
CString strAge = m_ListCtrl.GetItemText(nItem, 2);
MessageBox(strName + _T(", ") + strSex + _T(", ") + strAge, _T("信息"), MB_OK);
}
在代码中,通过设置列表的扩展风格,使其支持全行选择和复选框选择。在获取选中的行时,使用循环遍历列表中的每个行,判断该行是否被选中,如果是则获取对应的文本内容并通过MessageBox显示出来。
示例2:带图标列表
以下代码示例演示如何为列表中的每个行添加图标:
// 添加图标
CImageList imgList;
if (imgList.Create(16, 16, ILC_COLOR | ILC_MASK, 2, 0))
{
HICON hIcon1 = AfxGetApp()->LoadIcon(IDI_ICON1);
HICON hIcon2 = AfxGetApp()->LoadIcon(IDI_ICON2);
imgList.Add(hIcon1);
imgList.Add(hIcon2);
m_ListCtrl.SetImageList(&imgList, LVSIL_SMALL);
}
// 添加行及图标
int nItem = m_ListCtrl.InsertItem(0, _T("张三"), 0);
m_ListCtrl.SetItemText(nItem, 1, _T("男"));
m_ListCtrl.SetItemText(nItem, 2, _T("18"));
nItem = m_ListCtrl.InsertItem(1, _T("李四"), 1);
m_ListCtrl.SetItemText(nItem, 1, _T("男"));
m_ListCtrl.SetItemText(nItem, 2, _T("25"));
nItem = m_ListCtrl.InsertItem(2, _T("小芳"), 0);
m_ListCtrl.SetItemText(nItem, 1, _T("女"));
m_ListCtrl.SetItemText(nItem, 2, _T("21"));
在代码中,通过创建CImageList对象添加图标,并将其与列表控件关联。在添加行时,使用InsertItem方法同时添加图标。
以上是MFC列表控件CListCtrl的使用方法示范,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MFC列表控件CListCtrl使用方法示范 - Python技术站