Windows mobile下获取系统图标

%DUMP SESSIONS--List Windows Sessions 阅读详情

 http://blog.csdn.net/pknife/archive/2008/08/05/2772055.aspx

 

 这个问题其实是由pocket pc的CFileDialog问题引发来的。

 

CFileDialog打开后,只能选择My Documents下的目录和文件,功能超弱的说(其实应该叫CDocumentFileDialog才对)。

 

好想自己做一个Dialog啊,就跟PC上一样,可以选择任务目录和文件......

 

枝节不叙,捡点重要的来啰嗦。

 

用到一个CListCtrl控件,来显示目录下的文件,当然图标最好跟系统的一样,这样才美观。

 

这里假设m_ListFile就是list控件,m_ImlSys为CImageList对象,都为对话框的成员变量。代码如下:

HIMAGELIST    hImlSys;
SHFILEINFO    ssfi;

memset(&ssfi,0,sizeof(ssfi));
hImlSys = (HIMAGELIST)SHGetFileInfo(

                                   _T("hello"),
                                    0,
                                    &ssfi,
                                    sizeof(SHFILEINFO),
                                    SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX | SHGFI_SMALLICON);

m_ImlSys.Attach(hImlSys);
m_ListFile.SetImageList(&m_ImlSys, LVSIL_SMALL);

 

这样把系统的小图标(SHGFI_SMALLICON)都载入到了m_ImlSys。这些代码在Dialog的OnInitDialog中实现。"hello"也可以写成任何值,因为使用了SHGFI_USEFILEATTRIBUTES参数,会忽略第一个参数。还有一个很重要的问题是,在对话框退出时,要调用m_ImlSys.Detach()来销毁资源。不然,很可能退出对话框后,连系统"开始"的的图标都看不到了。

 

CListCtrl的InsertItem可以指定显示图标的索引(即图标在CImageList中的位置)。那么,怎么得到这个索引值呢?

 

还是使用SHGetFileInfo函数,如下:

SHFILEINFO ssfi;
SHGetFileInfo(pszFileName, 0, &ssfi, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON);

ssfi.iIcon就是我们要的值。在这里,pszFileName请指定文件的整个路径(包括后缀名)。

 

 

 

评论:

 

 

方法1:
m_pImageListSmall->Create(16, 16, ILC_COLOR16|ILC_MASK, 1, 1);
m_pImageListSmall->Add(lpAddTaskInfo->hIconSmall);
m_ListTask.SetImageList(m_pImageListSmall, LVSIL_SMALL);

方法2:
m_pImageListSmall->Create(16, 16, ILC_COLOR16|ILC_MASK, 0, 0);
m_ListTask.SetImageList(m_pImageListSmall, LVSIL_SMALL);
............

nItemCount = m_pImageListSmall->GetImageCount();
nImageCount += 1;
m_pImageListSmall->SetImageCount(nImageCount);
nImageCount = theApp.m_pImageListSmall->Add(lpAddTaskInfo->hIconSmall);
m_ListTask.InsertItem(0, TEXT("想要显示的值"), nImageCount);
m_ListTask.SetItemText(0, 1, TEXT("想要显示的值"));
............

if( m_pImageListSmall )
delete m_pImageListSmall; 文章链接:http://blog.csdn.net/pknife/archive/2008/08/05/2772055.aspx 发表时间:2008年12月11日 11:18:25">举报
上面方法会占用很多内存, 并且不会释放, 我之前也是这么做的, 发现内存泄漏很严重.
正确方法:
int nItemCount = 0;
CImageList *m_pImageListSmall;
SHFILEINFO ssfi;


m_pImageListSmall = new CImageList();
if( m_pImageListSmall == NULL )
return;

SHGetFileInfo( (LPCTSTR)_T("//"), 0, &ssfi, sizeof(SHFILEINFO),
SHGFI_TYPENAME | SHGFI_SYSICONINDEX | SHGFI_SMALLICON);

方法1:
m_pImageListSmall->Create(16, 16, ILC_COLOR16|ILC_MASK, 1, 1);
m_pImageListSmall->Add(lpAddTaskInfo->hIconSmall);
m_ListTask.SetImageList(m_pImageListSmall, LVSIL_SMALL);

方法2:
m_pImageListSmall->Create(16, 16, ILC_COLOR16|ILC_MASK, 0, 0);
m_ListTask.SetImageList(m_pImageListSmall, LVSIL_SMALL);
............

nItemCount = m_pImageListSmall->GetImageCount();
nImageCount += 1;
m_pImageListSmall->SetImageCount(nImageCount);
nImageCount = theApp.m_pImageListSmall->Add(lpAddTaskInfo->hIconSmall);
m_ListTask.InsertItem(0, TEXT("想要显示的值"), nImageCount);
m_ListTask.SetItemText(0, 1, TEXT("想要显示的值"));
............

if( m_pImageListSmall )
delete m_pImageListSmall;

 

获取系统文件图标 在做ftp客户端的时候我们常希望我们的ListView会象资源管理器一样工作.对不同类型的文件显示不同的图标.为此我们就需要获取系统图标:SHGetFileInfo这个API为我们提供了获取系统图标的方法.我这里把我以前写的一段程序弄上来省得要用的时候还得写了:using System;using System.Collections.Generic;using System.Text; 阅读详情

相关推荐

顺序表(Sequential List)详解:从数组到 C 语言实现

顺序表是用连续存储单元依次存储数据元素的线性结构,数组则是其最常见的实现方式,两者本质相同、仅视角不同——数组关注物理存储,顺序表关注逻辑关系。顺序表支持随机访问 $O(1)$,但插入删除需移动元素,效率为 $O(n)$。本文用 C 语言静态数组完整实现了顺序表的初始化、增删改查操作,帮助初学者在不涉及指针的前提下理解其核心原理,为后续学习动态顺序表打下基础。

Guangyu536的博客 299

windows 驱动实例分析系列: HidHide驱动分析-HidHideClient 篇(中)

`CWhitelistDlg` 是主对话框中的应用标签页,负责管理**白名单(Whitelist)**——即允许访问隐藏设备的应用程序列表。用户可以通过"插入"按钮选择可执行文件,或直接通过拖放(Drag & Drop)将 `.exe`、`.com`、`.bin` 文件拖入列表,从而实现快速添加。该对话框同时提供"删除"按钮移除选中条目,以及"反转白名单"复选框用于切换逻辑模式。

王马的博客 842

windows 驱动实例分析系列: HidHide驱动分析-HidHideCLI 篇(三)

`HID.cpp` 模块实现了完整的设备枚举与信息采集,这些功能与 GUI 版本共享相同的核心逻辑,但在输出格式上存在差异——CLI 版本输出 JSON,而 GUI 版本填充树形控件。

王马的博客 128

【回溯】【中等】全排列/子集/电话号码的字母组合/组合总和/括号生成/单词搜索/分割回文串

【待更新】

2301_81831660的博客 45

cmake教程

单/多个源文件、不同目录下的源文件、组织架构(源文件/头文件/对象文件/elf文件/库文件)、库的编译控制与链接(.so/.a)、编译选项、控制选项(生成部分文件/编译部分代码)

Wangshijie1015的博客 54

Qt的常用类QList--序列数据管理

因此可以采用下标来进行索引进行快速的访问。而QVector是Qt对所有数组的封装,它元素的存储位置彼此相邻,也就是说它是以数组的形式进行存储的,它的插入删除操作常常伴随着内存的移动,所以效率上并没有QList高。QlinkList我们可以把它当成一个链表,它以非连续的内存块进行保存数据,所以它不能使用下标进行访问,它更适合于数据的插入操作。通过list.at()函数和下标,它的区别就是通过下标的时候,QList会对它的数据进行一次拷贝,也就是内存的一次复制,所以我们通过下标这种方式效率不高。

qq_42831443的博客 100

75 条文章索引被一条 add 清成 1 条,退出码还是 0:tri-article 的 index.py 我读了 205 行

以一次真实清库事故切入,逐段复现 tri-article 索引脚本的三处静默失败并给出可运行加固代码(严格加载抛错、原子写 os.replace、长度差预筛的软去重)。附带 dedup 省略 --slug 时判定退化为「slug 长度 ≤2」、search 只搜 title、真实 75 条索引中 6 条在 domain 维度不可达、save_index 零调用等实测结论,并用 65/75 的哈希自证说明历史失配来自改标题未回写。

三声三视的博客 152

33 链表排序

给你链表的头结点head,请将其按排列并返回。[1,2,3,4]head = [][]你可以在O(n log n)时间复杂度和常数级空间复杂度下,对链表进行排序吗?

weixin_52079669的博客 205

Mybatis的多表操作问题

Q1 :一对一表关系之中哪个属性封装到<ResultMap>中?哪一个封装到<association>当中?Q2:一对多表关系之中哪个属性封装到<ResultMap>中?哪一个封装到<collection>当中?A:主要看谁包含谁,例如:一个用户 (User) 持有一张身份证 (IdCard)所以把OrderList封装进collection中。一个用户名下的所有订单。

m0_57532232的博客 221

Kali 字典攻击|口令爆破与目录爆破实战笔记

字典攻击属于优化版穷举攻击,不盲目暴力遍历所有字符,使用高频口令字典逐条尝试验证。✅字典攻击三要素目标接口:SSH、FTP、RDP、Web登录表单、数据库等接受账号密码校验的服务字典文件:纯文本,一行一条用户名/密码候选判定依据:响应状态码、页面关键字、响应长度、响应时间💡成功率取决于:字典质量 + 目标防护策略(限流、账号锁定、验证码)。

若谷的博客 414

Python笔记:dir() 和 help() 完整用法(适配Python二级 + IDLE实操)

本文系统讲解Python中dir()和help()函数的用法,适用于二级考试与IDLE实操。dir()用于查看对象的属性和方法名(如dir(str)),返回名称列表;help()则提供详细文档,如help(str.split),指导如何使用。二者配合使用:先用dir()找方法名,再用help()查用法。注意:dir()不支持关键字,help()括号内勿加(),且在IDLE中需逐行输入。口诀:“dir看目录,help看说明;dir找名字,help读详情”。

lxttzlove的博客 183

线程02-并发串行-互斥锁-Semaphore-Event

线程02-并发串行-互斥锁-Semaphore-Event

weixin_44073050的博客 181

Android 控件 - ListAdapter

Android 控件 - ListAdapter

weixin_52173250的博客 497

【无标题】

全局配置 Git:在提交代码到仓库时,自动把 Windows 的 CRLF 换行符,统一转换成 LF(Linux/Unix 换行);拉取代码时,保持文件里是 LF,不自动转回 Windows CRLF。在"C:\Users<你>“路径下创建文件”.wslconfig"

qbh001的博客 161

Chat2Excel 文件服务模块剩余功能开发

本文实现文件管理核心功能:通过分页查询、下载、预览、信息获取、一键复原及删除等接口,支持多条件筛选与权限校验。基于MyBatis-Plus与OSS,结合JWT鉴权与数据库映射表,完成文件元数据管理、Excel内容解析与数据回滚。服务层采用面向接口编程,保障扩展性与稳定性,实现高效、安全的文件全生命周期管理。

tryxr的博客 240

MyBatis 与 SQL 层面关键技术详解

<think>我们根据用户提供的内容生成摘要,要求≤150字。内容是关于MyBatis动态SQL、安全、分页、子查询、JOIN、大表优化和索引等。摘要需要概括关键技术点。注意字数。可能这样写:本文详解MyBatis动态SQL(if/foreach/where/sql片段)、#{}与${}安全区别、PageHelper物理分页及count陷阱、子查询形态、JOIN行膨胀处理,并提出大表取末次记录的应用层二次查询优化,强调索引与SQL性能关键。字数检查约80字,符合要求。</think>本文详解MyBatis动

BADAO_LIUMANG_QIZHI的博客 294

Hibernate 缓存机制与懒加载详解

懒加载的底层是运行时代理: 工作流程: 代理机制有两个直接推论: 与代理的微妙交互:懒加载代理是子类, 依然成立;但两个代理之间、代理与真实对象之间的 不同。比较实体类型用 ,解除代理用 。 默认 EAGER 是最常见的隐性 N+1 源头:加载 100 个订单项,每个都立即查询所属订单(即使你根本不需要)。团队纪律:所有关联显式声明 ,预加载统一走 fetch join / EntityGraph(第二章)。 成因链条: 三种解法按推荐度排序:解法一:事务边界内完成取数(首选) 配套原则:接口边界传 VO

萧瑟余晖的博客 384
上一篇: 怎样在Windows Mobile上设计一个美观的用户界面程序(Win32)
下一篇: Windows Mobile中GPRS连接网络
ked
ked
博客等级 码龄23年 51粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值