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);//要显示图片,需要调用此方法
/
相关文章:
MFC 原生LsitCtrl单元格嵌入图标
// ListItemInsertIconDlg.h: 头文件 //#pragma once// CListItemInsertIconDlg 对话框 class CListItemInsertIconDlg : public CDialogEx { // 构造 public:CListItemInsertIconDlg(CWnd* pParent nullptr); // 标准构造函数// 对话框数据 #ifdef AFX_DESIGN_TIMEenum { IDD…...

黑马头条 - minio
我是南城余!阿里云开发者平台专家博士证书获得者! 欢迎关注我的博客!一同成长! 一名从事运维开发的worker,记录分享学习。 专注于AI,运维开发,windows Linux 系统领域的分享! 知…...

认识Tomcat (一)
认识Tomcat (一) 一、服务器 1.1 服务器简介 硬件服务器的构成与一般的PC比较相似,但是服务器在稳定性、安全性、性能等方面都要求更高,因为CPU、芯片组、内存、磁盘系统、网络等硬件和普通PC有所不同。 软件服务器&…...

SSH免密切换服务器案例-ssh协议(公钥和私钥)
公钥和私钥理解 公钥提供加密,私钥解密,公钥可以共享,私钥不可以。举例公钥相当于锁头,可以给别人用,钥匙相当于私钥,只能开自己发出去的锁头,也就是私钥和公钥成对,私钥只能解密对…...

AMH面板如何安装与公网远程访问本地面板界面
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

【教3妹学编程-算法题】1696. 跳跃游戏 VI
3妹:好冷啊, 冻得瑟瑟发抖啦 2哥 : 没想到都立春了还这么冷啊~ 3妹:暴雪、冻雨、大雨,这天气还让不让人活啦!!! 2哥 :哎,好多人都滞留的高铁站了,没法回家了 3妹…...
解决C#中无限递归导致的System.StackOverflowException异常
目录 背景: 错误示例分析: 为什么是错误的? 正确的使用递归: 修改后的代码: 原理和原因: 结论: 背景: 在软件开发中,递归是一种常见的编程技术,它允许方法调用自…...

ASP.NET Core 预防开放式重定向攻击
写在前面 为预防钓鱼网站的常用套路,在进行 Web 应用程序的开发时,原则上应该将所有由用户提交的数据视为不可信。如果应用程序中包含了基于 URL 内容重定向的功能,需要确保这种类型的重定向操作只能在应用本地完成,或者明确判断…...

HashCat 恢复Excel、Word、PPT密码保姆教程
HashCat 恢复Excel、Word、PPT密码 一、流程 整体需要两个步骤 先用office2john.py获取下文件的hash值 python office2john.py 1.xlsx > hash这个命令需要你电脑有python环境,然后在cmd命令窗口中执行此命令就行 文件链接:https://github.com/magnu…...
flink实战--flink的job_listener使用解析
背景 生产环境可能有如下的需求:当一个flink作业提交完成或者是运行中不定时给我们触发某个接口或发送一个消息,然后我们在做其他的操作,尤其是batch作业。 flink的job_listener就可以满足我们监听flink任务提交和运行状态的需求,具体如何使用本文将全面介绍一下。 注册入…...
ASR 概述
前言 随着企业加强了与客户的线上沟通,企业越发依赖于虚拟助手、聊天机器人以及其他的语音技术,以实现与客户的高效互动。这几类人工智能,都是依赖于自动语音识别技术,简称为 ASR。ASR 涉及到将语音转换为文本,促使计…...

聊聊比特币----比特币地址
⽐特币地址是⼀个标识符(帐号),包含27-34个字母数字拉丁字符(0,O,I除外)。地址可以以QR码形式表⽰,是匿名的,不包含关于所有者的信息。 地址⽰例:14qViLJfdG…...

(4)【Python数据分析进阶】Machine-Learning模型与算法应用-回归、分类模型汇总
线性回归、逻辑回归算法应用请参考: https://codeknight.blog.csdn.net/article/details/135693621https://codeknight.blog.csdn.net/article/details/135693621本篇主要介绍决策树、随机森林、KNN、SVM、Bayes等有监督算法以及无监督的聚类算法和应用PCA对数据进行降维的算法…...
Python 调用 OpenAI ChatGPT API
一、安装环境1. 安装python环境 $ pip install openai 2. 验证是否安装成功 方法1,bash命令验证 $ pip show openai 方法2,python脚本验证 import openai print(openai.__version__) 3. 找到你的 OpenAI API Key:进入OpenAI官网࿰…...

springboot155基于JAVA语言的在线考试与学习交流网页平台
简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…...

echarts使用之地图(五)
1 基本使用 百度地图 API : 使用百度地图的 api , 它能够在线联网展示地图 , 百度地图需要申请 ak 矢量地图 : 可以离线展示地图 , 需要开发者准备矢量地图数据。本文使用该方式。 json格式的数据如下: 格式参照:GeoJSON <!DOCTYPE html&…...

【已解决】青龙面板依赖安装失败原因
青龙面板必须安装依赖,才可以执行脚本,这是不争的事实。 如果脚本跑不起来,就去看看依赖吧。 NodeJs 依赖如下 axios request canvas cheerio js-base64 dotenv magic tough-cookie ws7.4.3 require requests date-fns ts-md5 typescript j…...

[Python] 什么是KMeans聚类算法以及scikit-learn中的KMeans使用案例
什么是无监督学习? 无监督学习是机器学习中的一种方法,其主要目的是从无标签的数据集中发现隐藏的模式、结构或者规律。在无监督学习中,算法不依赖于任何先验的标签信息,而是根据数据本身的特征和规律进行学习和推断。无监督学习…...

在 iOS 上安装自定企业级应用
了解如何安装您的组织创建的自定应用并为其建立信任。 本文适用于学校、企业或其他组织的系统管理员。 您的组织可以使用 Apple Developer Enterprise Program 创建和分发企业专用的 iOS 应用,以供内部使用。您必须先针对这些应用建立信任后,才能将其打…...

【Linux C | I/O模型】Unix / Linux系统的5种IO模型 | 图文详解
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...