MFC ListCtrl控件任意列添加圖片

首先,先將需要使用到的icon加入到資源文件(下圖的IDI_ICON2和IDI_ICON3)。

在dialog中新建一個ListCtrl,並且在Dlg.cpp中的DoDataExchange函數中進行綁定。

void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST, m_list);
}

這樣準備工作就完了,接着在Dlg::OnInitDialog()中添加代碼如下。

	//設置擴展樣式,其中的LVS_EX_SUBITEMIMAGES沒有的話沒法在非第一列添加圖片
	m_list.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_SUBITEMIMAGES | LVS_EX_FULLROWSELECT);
	//創建ImageList,其中前3個參數分別爲x,y,位圖顏色
	//如果圖像出來的顏色不對可以試着改下第3項
	m_IconList.Create(120, 128, ILC_COLORDDB | ILC_MASK, 30, 30);
	//向ImageList添加圖片
	m_IconList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
	m_IconList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
	//將ImageList設置到ListCtrl中
	m_list.SetImageList(&m_IconList, LVSIL_SMALL);
	//添加列
	m_list.InsertColumn(0, _T("第1列"), LVCFMT_CENTER, 125, 0);
	m_list.InsertColumn(1, _T("第2列"), LVCFMT_CENTER, 150, 1);
	m_list.InsertColumn(2, _T("第3列"), LVCFMT_CENTER, 120, 2);
	m_list.InsertColumn(3, _T("第4列"), LVCFMT_CENTER, 200, 3);
	//添加屬性
	LV_ITEM lvitem;
	for (int i = 0; i < 2; i++) {
		//添加元素,設置第2列上的圖片(雖然這裏是第1列但下面會交換)
		memset((char *)&lvitem, '\0', sizeof(LV_ITEM));
		lvitem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
		lvitem.iItem = i; lvitem.iSubItem = 0; lvitem.iImage = i;
		//lvitem.pszText = _T("文字");
		m_list.InsertItem(&lvitem);
		//設置第1、3列
		m_list.SetItemText(i, 1, _T("one"));
		m_list.SetItemText(i, 2, _T("three"));
		//設置第4列
		memset((char *)&lvitem, '\0', sizeof(LV_ITEM));
		lvitem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
		lvitem.iItem = i; lvitem.iSubItem = 3; lvitem.iImage = 0;
		lvitem.pszText = _T("four");
		m_list.SetItem(&lvitem);
	}
	//獲得HeadCtrl
	CHeaderCtrl *headerCtrl = m_list.GetHeaderCtrl();
	//獲取當前順序
	int cnt = headerCtrl->GetItemCount();
	LPINT order = (LPINT)malloc(cnt * sizeof(int));
	headerCtrl->GetOrderArray(order, cnt);
	//交換順序
	int temp;
	temp = order[0];
	order[0] = order[1];
	order[1] = temp;
	//設置新順序並釋放
	headerCtrl->SetOrderArray(cnt, order);
	free(order);

效果如下圖。

由於第1列是綁定了ImageCtrl的,所以一定是會顯示圖片的。因此爲了第1列不顯示圖片,需要利用HeadCtrl將第1列與第2列交換位置來實現僅僅使第2、4列顯示圖片而不在第1列顯示圖片。

這樣的話,就可以在任意想要的列上添加圖片了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章