您的位置:首页 > 其它

MFC_CListCtrl 列表控件(常用)

2017-09-25 21:28 579 查看
//感谢猎豹网校的视频

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);//改变样式;第一个参数是固定的,第二个是我们选择的。
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: