cpp
// ListItemInsertIconDlg.h: 头文件
//
#pragma once
// CListItemInsertIconDlg 对话框
class CListItemInsertIconDlg : public CDialogEx
{
// 构造
public:
CListItemInsertIconDlg(CWnd* pParent = nullptr); // 标准构造函数
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_LISTITEMINSERTICON_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
CListCtrl m_list;
CImageList m_iconList;
void InitListCtrl();
afx_msg void OnBnClickedButtonUpdate();
};
cpp
// ListItemInsertIconDlg.cpp: 实现文件
//
#include "pch.h"
#include "framework.h"
#include "ListItemInsertIcon.h"
#include "ListItemInsertIconDlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CListItemInsertIconDlg 对话框
CListItemInsertIconDlg::CListItemInsertIconDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_LISTITEMINSERTICON_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CListItemInsertIconDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST1, m_list);
}
BEGIN_MESSAGE_MAP(CListItemInsertIconDlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_UPDATE, &CListItemInsertIconDlg::OnBnClickedButtonUpdate)
END_MESSAGE_MAP()
// CListItemInsertIconDlg 消息处理程序
void CListItemInsertIconDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
HCURSOR CListItemInsertIconDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
BOOL CListItemInsertIconDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
m_iconList.Create(32, 32, 1, 10, 4);
int icon_id = 0;
icon_id = m_iconList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
icon_id = m_iconList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
icon_id = m_iconList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
m_list.SetImageList(&m_iconList, LVSIL_SMALL);
InitListCtrl();
return TRUE;
}
void CListItemInsertIconDlg::InitListCtrl()
{
m_list.DeleteAllItems();
while (m_list.DeleteColumn(0));
m_list.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EDITLABELS | LVS_EX_SUBITEMIMAGES); //一定要设置LVS_EX_SUBITEMIMAGES
m_list.InsertColumn(0, "NAME");
m_list.InsertColumn(1, "NAME2");
m_list.InsertColumn(2, "NAME3");
m_list.SetColumnWidth(0, 200);
m_list.SetColumnWidth(1, 200);
m_list.SetColumnWidth(2, 200);
for (int i = 0; i < 5; i++)
{
//LV_ITEM lvitem;
//memset((char*)&lvitem, '\0', sizeof(LV_ITEM));
//lvitem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
//lvitem.iItem = i; //第n行
//lvitem.iSubItem = 0; //第x列
//lvitem.stateMask = 0;
//lvitem.iImage = 0; //显示不同的图标时,可以把一个int 变量赋给这个属性值
//lvitem.pszText = "1";
//m_list.InsertItem(&lvitem);
m_list.InsertItem(i, "1", 1);
}
//for (int i = 0; i < 5; i++)
//{
// LV_ITEM lvitem;
// memset((char*)&lvitem, '\0', sizeof(LV_ITEM));
// lvitem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
// lvitem.iItem = i; //第n行
// lvitem.iSubItem = 1; //第x列
// lvitem.stateMask = 0;
// lvitem.iImage = 1; //显示不同的图标时,可以把一个int 变量赋给这个属性值
// lvitem.pszText = "2";
// m_list.SetItem(&lvitem);
//}
//for (int i = 0; i < 5; i++)
//{
// LV_ITEM lvitem;
// memset((char*)&lvitem, '\0', sizeof(LV_ITEM));
// lvitem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
// lvitem.iItem = i; //第n行
// lvitem.iSubItem = 2; //第x列
// lvitem.stateMask = 0;
// lvitem.iImage = 2; //显示不同的图标时,可以把一个int 变量赋给这个属性值
// lvitem.pszText = "3";
// m_list.SetItem(&lvitem);
//}
}
void CListItemInsertIconDlg::OnBnClickedButtonUpdate()
{
InitListCtrl();
}
工程示例
/
如果是使用扩展类CListCtrlEx
ListCtrlEx::CListCtrlEx m_list;
则需要调用SetCellImage函数,如下:
m_list.InsertItem(nRow, _T(str), 0);
m_list.SetCellImage(nRow, 0, 0);//要显示图片,需要调用此方法
/