效果如图:
Icon
Small Icon
List
Report
首先要在初始化对话框中设置ListCtrl的表头,正常图标,小图标
表头设置如下:
//获取指向列表控件的指针
CListCtrl* pLc = (CListCtrl*)GetDlgItem(IDC_LIST);
//改变视图为详细信息(report)
pLc->ModifyStyle(LVS_TYPEMASK, LVS_ICON);
//插入表头
pLc->InsertColumn(0, _T("第一列"), LVCFMT_LEFT,150);
pLc->InsertColumn(1, _T("第二列"), LVCFMT_LEFT,150);
设置图标,我用的是32位和16的bmp位图,把它添加到资源中
然后在头文件中添加两个CImageList变量
CImageList m_LagerIcon;
CImageList m_SmallIcon;
接在在初始化对话框中进行加载
//创建大图标
m_LagerIcon.Create(IDB_BMP_LARGE, 32, 1, RGB(255, 0, 0));
//创建小图标
m_SmallIcon.Create(IDB_BMP_SMALL, 16, 1, RGB(255, 0, 0));
pLc->SetImageList(&m_LagerIcon, LVSIL_NORMAL);//显示正常图标
pLc->SetImageList(&m_SmallIcon, LVSIL_SMALL);//显示小图标
列表初始化已经完成,接着向列表添加行
int iCount = m_List.GetItemCount();//获取列表中有多少行
CString strText;
strText.Format(_T("第 %d 行,第 1 列"), iCount + 1);
m_List.InsertItem(iCount, strText); //第一列的行要用插入
strText.Format(_T("第 %d 行,第 2 列"), iCount + 1);
//第二列以后就要用设置Item文本,第一个参数是行,第二个是列,第三个是插入的字符串
m_List.SetItemText(iCount,1,strText);
接着可以删除列表中的项
int iCount = m_List.GetItemCount();
//可以多选然后删除
for (int i = iCount; i >= 0; i--)
{
if (m_List.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED)
{
m_List.DeleteItem(i);//选中了就删除
}
}
接下来就是改变列表视图,我用了个组合框,当选中某一个View的时候就显示那个View.右键单击组合框添加事件
void CMFCTESTDlg::OnCbnSelchangeCombo1()
{
// TODO: 在此添加控件通知处理程序代码
//当前选中的View的索引
int iIndex = m_combox.GetCurSel();
switch (iIndex)
{
case 0: //正常图标显示
m_List.ModifyStyle(LVS_TYPEMASK, LVS_ICON);
break;
case 1: //小图标显示
m_List.ModifyStyle(LVS_TYPEMASK, LVS_SMALLICON);
break;
case 2: //List显示
m_List.ModifyStyle(LVS_TYPEMASK, LVS_LIST);
break;
case 3: //详细信息显示
m_List.ModifyStyle(LVS_TYPEMASK, LVS_REPORT);
break;
default:
break;
}
}