使用前说明:
PS:如果您想正常使用该类,需要在添加一个资源文件sx(如果是Win Form项目,该文件已存在),然后在资源文件中添加五个图标ICON元素,用于充当默认图标。命名为:Application、CDDriver、Empty、Folder、HardDriver。如下图所示:
← 资源文件
PPS:每个图标文件均包括48*48,32*32和16*16三种像素大小。如果您使用VS2008自带的图标库中的图标,则自动包含这三种像素大小(本例所使用的图标即是取自该库)。
PPPS:VS2008的默认路径为(如果您安装VS2008时选择安装该图标库的话):C:\Program Files\Microsoft Visual Studio 9.0\Common7\VS2008ImageLibrary\2052。
位于该路径下的一个压缩文件包含几乎所有的系统图标元素。
PPPPS:如果你确定不需要使用默认图标,请将静态构造函数注释。但此时程序有可能返回空的图标对象null,
/* 该类是从最近编写的一个FTP软件中抽取出来的。
* 该类基础原型来自网络,经过大量的修改和注释添加才得以完成,其中SHFileInfoFlags枚举值注释
* 是从英文文档逐个翻译的,由于本人英语水平有限,难免有翻译不当之处,敬请谅解。
* 类中各函数作用请参见注释。
*
* 使用时请您尊重他人的劳动成果,如果您需要分享该文档,请务必使用免费方式分享。
*
* 因为最近发现有人将我文库的文档分享到自己的文库、空间、CSDN上面,而且提供索要积分的方式下载
* 关键是我在百度搜关键词,竟然搜不到我自己的,只搜到别人的,气愤ing o(╯□╰)o
*/
//于北京海淀区东升科技园内 3/9/2012 YJWang
using System;
using System.Runtime.InteropServices;
using System.Drawing;
using System.IO;
namespace FTPComponent
{
/// <summary>
/// 获取系统文件图标,Designed by YJWang 2/20/2012
/// </summary>
public class SystemIcon
{
#region 【内部类型定义】
#region 【Enums】
/// <summary>
/// 文件信息标识枚举类,所有枚举定义值前省略SHGFI投标,比如Icon 完整名称应为SHGFI_ICON
/// </summary>
[Flags]
private enum SHFileInfoFlags : uint
{
/// <summary>
/// 允许有叠加图案的文件图标,该标识必须和Icon同时使用
/// </summary>
AddOveylays = 0x20,
/// <summary>
/// 只获取由参数FileAttribute指定的文件信息,并将其写入SHFileInfo结构的dwAttributes属性,如果不指定该标识,将同时获取所有文件信息。该标志不能和Icon标识同时使用
/// </summary>
Attr_Specified = 0x20000,
/// <summary>
/// 将获取的文件属性复制到SHFileInfo结构的dwAttributes属性中
/// </summary>
Attributes = 0x800,
/// <summary>
icon图标库/// 获取文件的显示名称(长文件名称),将其复制到SHFileInfo结构的dwAttributes属性中
/// </summary>
DisplayName = 0x200,
/// <summary>
/// 如果文件是可执行文件,将检索其信息,并将信息作为返回值返回
/// </summary>
ExeType = 0x2000,
/// <summary>
/// 获得图标和索引,将图标句柄返回到SHFileInfo结构的hIcon属性中,索引返回到iIcon属性中
/// </summary>
Icon = 0x100,
/// <summary>
/// 检索包含图标的文件,并将文件名,图标句柄,图标索引号,放回到SHFileInfo结构中
/// </summary>
IconLocation = 0x1000,
/// <summary>
/// 获得大图标,该标识必须和Icon标识同时使用
/// </summary>
LargeIcon = 0x0,
/// <summary>
/// 获取链接覆盖文件图标,该标识必须和Icon标识同时使用。
/// </summary>
LinkOverlay = 0x8000,
/// <summary>
/// 获取文件打开时的图标,该标识必须和Icon或SysIconIndex同时使用
/// </summary>
OpenIcon = 0x2,
/// <summary>
/// 获取链接覆盖文件图标索引,该标识必须和Icon标识同时使用。
/// </summary>
OverlayIndex = 0x40,
/// <summary>
/// 指示传入的路径是一个ITEMIDLIST结构的文件地址而不是一个路径名。
/// </summary>
Pidl = 0x8,
/// <summary>
/// 获取系统的高亮显示图标,该标识必须和Icon标识同时使用。
/// </summary>
Selected = 0x10000,
/// <summary>
/// 获取 Shell-sized icon ,该标志必须和Icon标识同时使用。
/// </summary>
ShellIconSize = 0x4,
/// <summary>
/// 获得小图标,该标识必须和Icon或SysIconIndex同时使用。
/// </summary>
SmallIcon = 0x1,
/// <summary>
/// 获取系统图像列表图标索引,返回系统图像列表句柄
/// </summary>
SysIconIndex = 0x4000,
/// <summary>
/// 获得文件类型,类型字符串被写入SHFileInfo结构的szTypeName属性中
/// </summary>
TypeName = 0x400,
/// <summary>
/// 指示如果由pszPath指定的路径不存在,SHGetFileInfo方法变不会试图去操作文件。指示返回与文件类型相关的信息。该标识不能和Attributes、ExeType和Pidl同时使用
/// </summary>
UseFileAttributes = 0x10
}
/// <summary>
/// 文件属性枚举
/// </summary>
[Flags]
private enum FileAttribute
{
ReadOnly = 0x00000001,
Hidden = 0x00000002,
System = 0x00000004,
Directory = 0x00000010, //路径信息
Archive = 0x00000020,
Device = 0x00000040,
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论