CListCtrl&CTabCtrl添加图像Icon

来源:互联网 发布:九阴御姐女捏脸数据 编辑:程序博客网 时间:2024/06/03 16:01

CListCtrl&CTabCtrl添加图像Icon

列表控件以及Tab页控件可以按照类别显示信息。为了增加显示的明朗,美观,可视性,可以为没个显示内容增加ICON。下面就将近日的心得整理如下,如何在列表以及TAB页标签中加入图像。

1. 声明变量:

// CtstsDlg 对话框
class CtstsDlg : public CDialog
{
// 构造
public:
CtstsDlg(CWnd* pParent = NULL); // 标准构造函数

// 对话框数据
enum { IDD = IDD_TSTS_DIALOG };

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

// 重载虚函数

virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
public:
// 列表控件
CListCtrl m_ListCtrl;
public:
// 图像列表

CImageList m_ImageList;
public:
// 控制页
CTabCtrl m_tabCtrl;
};

2. 功能实现

功能实现主要是在OnInitDialog() 函数中进行,具体代码如下:

// CtstsDlg 消息处理程序

BOOL CtstsDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// 将“关于...”菜单项添加到系统菜单中。

// 省略系统代码...................................

//****************************************************

// TODO: 在此添加额外的初始化代码

// 创建并初始化 图像列表 ,其中IDI_ICON1等等是已经在资源中创建的ICON的ID号
m_ImageList.Create(16, 16, ILC_COLOR16 | ILC_MASK, 5, 2);
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONBit));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONState));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICONGraph));

// 设置列表控件的属性,从而使其具备为每一个SUNITEM添加ICON的能力

m_ListCtrl.SetExtendedStyle(m_ListCtrl.GetExtendedStyle() | LVS_EX_FULLROWSELECT);
m_ListCtrl.SetExtendedStyle(m_ListCtrl.GetExtendedStyle() | LVS_EX_HEADERDRAGDROP);
m_ListCtrl.SetExtendedStyle(m_ListCtrl.GetExtendedStyle() | LVS_EX_GRIDLINES);

// 此属性最重要,另外,必须设置列表控件具备属性LVS_REPORT
m_ListCtrl.SetExtendedStyle(m_ListCtrl.GetExtendedStyle() | LVS_EX_SUBITEMIMAGES);
// 将图像列表添加到列表控件中
m_ListCtrl.SetImageList(&m_ImageList, LVSIL_SMALL);

// 创建列表控件的各个列,第一列为空列
m_ListCtrl.InsertColumn(0,"",LVCFMT_CENTER,0);
m_ListCtrl.InsertColumn(1,"city",LVCFMT_CENTER,100);
m_ListCtrl.InsertColumn(2,"Language",LVCFMT_CENTER,100);
m_ListCtrl.InsertColumn(3,"People",LVCFMT_CENTER,100);
// 创建列表控件的各个行

int item=m_ListCtrl.InsertItem(0,""); // 第一列对应的行为空
m_ListCtrl.SetItemData(item,0);
m_ListCtrl.SetItemText(item,1,"QingDao");
m_ListCtrl.SetItemText(item,2,"Chinese");
m_ListCtrl.SetItemText(item,3 ,"sophia");

// 设置 显示结构体, 为第一行添加ICON
LV_ITEM lvitem = {0};
lvitem.mask = LVIF_IMAGE;
lvitem.iItem = item;
lvitem.iSubItem = 1;
lvitem.iImage = 1; // 图像索引,以ImageList添加顺序为准
m_ListCtrl.SetItem(&lvitem);
lvitem.iSubItem = 2;
lvitem.iImage = 2;
m_ListCtrl.SetItem(&lvitem);

// 添加列表控件第二列,同理,第一列对应的行单元为空

item=m_ListCtrl.InsertItem(1,"");
m_ListCtrl.SetItemData(item,1);
m_ListCtrl.SetItemText(item,1,"BeiJing");
m_ListCtrl.SetItemText(item,2,"Chinese");
m_ListCtrl.SetItemText(item,3 ,"Ben");
// 为第二行添加ICON图像
lvitem.iItem = item;
lvitem.iSubItem = 1;
lvitem.iImage = 0;
m_ListCtrl.SetItem(&lvitem);
lvitem.iSubItem = 2;
lvitem.iImage = 3;
m_ListCtrl.SetItem(&lvitem);

// TabCtrl 添加ICON

m_tabCtrl.SetImageList(&m_ImageList);
m_tabCtrl.InsertItem(0,"bitmap",2);
m_tabCtrl.InsertItem(1,"state",3);
m_tabCtrl.InsertItem(2," graph",4);
return TRUE;
}

3. 实现结果如下:

// TAB 页添加ICON显示



// 列表控件添加ICON显示