当前位置: 首页 > article >正文

MFC 原生LsitCtrl单元格嵌入图标


// 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();
};


// 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);//要显示图片,需要调用此方法

/


http://www.kler.cn/a/227273.html

相关文章:

  • (安卓)跳转应用市场APP详情页的方式
  • Vue中间件的讲解案例分析
  • rust学习基于tokio_actor聊天服务器实战(一 )
  • 线性代数:线性方程组
  • 如何预防最新的.kat6.l6st6r 勒索病毒感染您的计算机?
  • el-table点击某一行选中改变背景色且执行方法
  • Docker 常用命令详细介绍
  • Linux下新建用户
  • 无人机遥感技术在地质灾害监测应用分析,多旋翼无人机应急救援技术探讨
  • CMake生成osg的FFMPEG插件及Windows下不生成VS工程问题解决
  • Redis的big key问题介绍以及监控手段
  • [GN] DP学习笔记板子
  • Go协程揭秘:轻量、并发与性能的完美结合
  • 【Linux】【Shell】常用压缩和解压缩命令(超详细)
  • 数字化商品计划管理:提升运营效率和竞争力的关键
  • 视觉惯性SLAM系列——ORB-SLAM3的整体介绍及各个线程的功能(五)
  • 【Linux系统化学习】进程等待
  • 大小姐驾到!高德地图联合《王者荣耀》推出孙尚香导航语音包
  • 全流程机器视觉工程开发(三)任务前瞻 - 从opencv的安装编译说起,到图像增强和分割
  • paragon ntfs软件2024中文版免费下载安装步骤教程