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

MFC 原生LsitCtrl单元格嵌入图标


// ListItemInsertIconDlg.h: 头文件
//#pragma once// CListItemInsertIconDlg 对话框
class CListItemInsertIconDlg : public CDialogEx
{
// 构造
public:CListItemInsertIconDlg(CWnd* pParent = nullptr);	// 标准构造函数// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_LISTITEMINSERTICON_DIALOG };
#endifprotected: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_SUBITEMIMAGESm_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.lryc.cn/news/294276.html

相关文章:

  • 黑马头条 - minio
  • 认识Tomcat (一)
  • SSH免密切换服务器案例-ssh协议(公钥和私钥)
  • AMH面板如何安装与公网远程访问本地面板界面
  • 【教3妹学编程-算法题】1696. 跳跃游戏 VI
  • 解决C#中无限递归导致的System.StackOverflowException异常
  • ASP.NET Core 预防开放式重定向攻击
  • HashCat 恢复Excel、Word、PPT密码保姆教程
  • flink实战--flink的job_listener使用解析
  • ASR 概述
  • 聊聊比特币----比特币地址
  • (4)【Python数据分析进阶】Machine-Learning模型与算法应用-回归、分类模型汇总
  • Python 调用 OpenAI ChatGPT API
  • springboot155基于JAVA语言的在线考试与学习交流网页平台
  • echarts使用之地图(五)
  • 【已解决】青龙面板依赖安装失败原因
  • [Python] 什么是KMeans聚类算法以及scikit-learn中的KMeans使用案例
  • 在 iOS 上安装自定企业级应用
  • 【Linux C | I/O模型】Unix / Linux系统的5种IO模型 | 图文详解
  • C++设计模式-简单工厂模式,工厂方法模式,抽象工厂模式
  • java处理ppt方案详解
  • 鸿蒙4.0.0 安装minitouch
  • 前端excel带样式导出 exceljs 插件的使用
  • 用GOGS搭建GIT服务器
  • 2024年美赛数学建模E题思路分析 - 财产保险的可持续性
  • 哪种安全数据交换系统,可以满足信创环境要求?
  • OfficeWeb365 Readfile 任意文件读取漏洞
  • 机器学习基础、数学统计学概念、模型基础技术名词及相关代码个人举例
  • 小埋的解密游戏的题解
  • idea常用设置