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

2008-02-23 07:00:19来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

---- 在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

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

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:用VB实现应用程序在局域网络上自动更新

下一篇:VB5.0与Windows API 间的呼叫技巧(一)