//感谢猎豹网校的视频
MFC class : CListCtrl
四种视图:大图标/小图标/列表/详细信息
CImageList : 图像列表控件,用于图像保存,多个图像亦可,用作大小图标显示。
最常见的列表控件,就是 平时见到的Windows文件资源管理器重看到的文件列表。
1.开始工作吧
2.添加“List Control””Button”“Combo Box” 制作界面。
IDC_LIST IDC_BTN_ADD IDC_BTN_DEL IDC_CMB_VIEW
组合框用于选择视图样式
3.初始化对话框程序,初始化列表空间
// TODO: 在此添加额外的初始化代码
//列表控件实质是个表格
//现在给其增加表头,设置样式,添加行
m_list.ModifyStyle(LVS_TYPEMASK,LVS_REPORT);//共有4中样式,REPORT为详细信息,第一个参数是固定的
m_list.InsertColumn(0,_T("第一列"),LVCFMT_LEFT,120);//添加表头,第一列/表头名字/左对齐/宽度
m_list.InsertColumn(1,_T("第二列"),LVCFMT_LEFT,120);//添加表头,第二列
//windows资源管理器前都含有图标//在此之前应在Dlg.h添加图片列表控件的公共 类成员
m_ilLarge.Create(IDB_LARGEDOC,32,1,RGB(255,0,0));//最后一个参数设置颜色,第一个参数表示图像列表控件变量名,第二个参数为32*32,第三个参数是图片ID
m_ilSmall.Create(IDB_SMALLDOC,16,1,RGB(255,0,0));//mm_ilLarge为图片列表控件变量
m_list.SetImageList(&m_ilLarge,LVSIL_NORMAL);//NORMAL大图标
m_list.SetImageList(&m_ilSmall,LVSIL_SMALL); //SMALL小图标
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
在Dlg.h添加图像空间类成员,在文件夹中添加图像资源(将32*32,16*16复制到res文件夹中)
// 实现
protected:
HICON m_hIcon;
//列表控件带图标,大小图标(图像列表)
CImageList m_ilLarge;//既然叫图像列表空间,里面可以放置很多图片
CImageList m_ilSmall;//小图标;图标大小在OnInitDlg()中定义
// 生成的消息映射函数
编辑“添加”按钮的处理函数
void Clb012Dlg::OnBnClickedBtnAdd()
{
// TODO: 在此添加控件通知处理程序代码
int nCount = m_list.GetItemCount();//获得列表控件的目前总行数
CString strText;
strText.Format(_T("第%d行,第1列"),nCount+1);
m_list.InsertItem(nCount,strText,0);//0代表第一个图标,之前也只初始化了一个图标,序号为0
strText.Format(_T("第%d行,第2列"),nCount+1);
m_list.SetItemText(nCount,1,strText);//1代表第二列,这个函数不再是Insert,设置第二列信息。第1列和第2列是成对出现的。前面已经插入了一条ITEM,第2个命令是补充。
}
编辑“删除”按钮的处理函数
void Clb012Dlg::OnBnClickedBtnDel()
{
// TODO: 在此添加控件通知处理程序代码
int nCount = m_list.GetItemCount();//先计算列表中总共多少行
for(int i = nCount; i>= 0; i--) //删除操作,从后往前工作
{
if(m_list.GetItemState(i,LVIS_SELECTED) == LVIS_SELECTED)//状态判断,是否被选中,这样任何一条被选中都可以进行相应的操作
m_list.DeleteItem(i);
}
}
设置组合框
属性表——data设置为“大图标;小图标;列表;详细信息”(;分割,英文输入法)
——sort 设置为“False”
——type 设置为“Drop List”下拉列表
插曲:昨天可以,但是同样程序今天报错。
“error RC2170:bitmap file xxx.png is not in 3.00 format”
原因是MS 对PNG格式支持不太好,建议使用 bmp格式。
解决方法还有:
修改如下代码中的BITMAP 为 PNG
//xxx.rc
/////////////////////////////////////////////////////////////////////////////
//
// PNG
//
IDB_LARGEDOC PNG "res\\big.png"
IDB_SMALLDOC PNG "res\\small.png"
/////////////////////////////////////////////////////////////////////////////
回到组合框,选中组合框,选择“CBN_SELCHANGE”消息,重写消息处理函数
void Clb012Dlg::OnCbnSelchangeCmbView()
{
// TODO: 在此添加控件通知处理程序代码
DWORD dwStyle; //用于记录图标显示样式
CComboBox *pView;
pView = (CComboBox*)GetDlgItem(IDC_CMB_VIEW);//得到组合框对象。
switch(pView->GetCurSel())//获得当前组合框选中的哪条 !!!其实是序号。
{
case 0: //0代表第一个,组合框中序号
dwStyle = LVS_ICON; //大图标
break;
case 1:
dwStyle = LVS_SMALLICON;//小图标
break;
case 2:
dwStyle = LVS_LIST; //列表
case 3:
dwStyle = LVS_REPORT; //详细信息
break;
default:
break;
}
m_list.ModifyStyle(LVS_TYPEMASK,dwStyle);//改变样式;第一个参数是固定的,第二个是我们选择的。
}