手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>VB>列表

VB编程获取文件中集成的图标

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
---- 在Win95 下 的 应 用 软 件 使 用 了 打 量 精 美 的 图 标, 而 很 多 图 标 资 源 是 集 成 在EXE、DLL 文 件 中 的( 例 如Win95 的 回 收 站 就 使 用 了Shell32.dll 中 的 图 标,31 号 图 标 表 示 回 收 站 空,32 号 表 示 回 收 站 有 被 删 除 文 件) 在 我 们 编 程 中, 可 以 利 用Win95 的API 函 数ExtractIcon 可 以 将EXE、DLL 文 件 中 的 图 标 资 源 取 出, 下 面 通 过 一 个VB 的 例 子 通 过 使 用 该 函 数 将 文 件 中 包 含 的 图 标 取 出 并 且 在 一 个 图 片 框 内 浏 览。

---- 1、 在Form1 的General 的Declarations 中 定 义 以 下 两 个 函 数:

Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long,ByVal lpszExeFileName As String,ByVal nIconIndex As Long) As Long
ExtractIcon函数包含三个参量:
hInst表示当前的程序实例
lpszExeFileName表示包含图标的资源文件名
nIconIndex表示要取出的图标的序号

---- 如 果nIconIndex 为-1, 则 函 数 返 回 包 含 图 标 资 源 的 文 件 的 图 标 个 数.

---- 从 文 件 中 取 出 图 标 资 源 前, 应 首 先 调 用 该 函 数 获 得 文 件 中 包 含 的 图 标 资 源 的 个 数.

---- 如nIconIndex 为 图 标 资 源 的 序 号, 则 返 回 图 标 句 柄.

Private Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long
DrawIcon函数将图标画到一个图形设备上,
hdc为图形设备句柄,x,y为起始位置,
hIcon为图标句柄。

---- 定 义 三 个 全 局 变 量:

Dim lNum As Long '图标的序号
Dim lCount As Long '文件中包含的图标的总数
Dim astr As String '包含图标的文件名

---- 2、 在Form1 中 添 加 以 下 控 件:

a、CommandButton,Name属性设置为COpen
b、CommandButton,Name属性设置为
CPrv,Enabled属性设置为False
c、CommandButton,Name属性设置为
CNext,Enabled属性设置为False
d、CommonDialog,Name属性设置为
CommonDialog1,Filter属性设置为"可执行文件(*.exe)|
*.exe|动态链接库(*.dll)|*.dll|所有文件(*.*)|*.*"

---- 3、 全 部 源 程 序 如 下:

Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long
Private Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long,ByVal hIcon As Long) As Long
Dim lNum As Long
Dim lCount As Long
Dim astr As String

Private Sub CNext_Click() '浏览下一个图标
lNum = lNum 1
x1 = ExtractIcon(App.hInstance, astr, lNum)
Form1.Refresh
x2 = DrawIcon(Form1.hdc, 10, 10, x1)
CPrv.Enabled = True
If lNum = lCount Then
CNext.Enabled = False
End If
End Sub

Private Sub COpen_Click() '打开文件
Dim x1 As Long
Dim x2 As Long

CommonDialog1.ShowOpen
lCount = ExtractIcon(App.hInstance, CommonDialog1.filename, -1)
If lCount > 0 Then
astr = CommonDialog1.filename
lNum = 0
Form1.Caption = astr
CPrv.Enabled = False: CNext.Enabled = True
x1 = ExtractIcon(App.hInstance, astr, lNum)
Form1.Refresh
x2 = DrawIcon(Form1.hdc, 10, 10, x1)
Else
x1 = MsgBox("File Contain no icon resource.")
CPrv.Enabled = False: CNext.Enabled = False
End If
End Sub

Private Sub CPrv_Click() '浏览前一个图标
lNum = lNum - 1
x1 = ExtractIcon(App.hInstance, astr, lNum)
Form1.Refresh
x2 = DrawIcon(Form1.hdc, 10, 10, x1)
CNext.Enabled = True
If lNum = 0 Then
CPrv.Enabled = False
End If
End Sub

上一篇: 实现窗体内部的左右移动
下一篇: 封面的设计

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!