VB编程获取文件中集成的图标
图老师小编精心整理的VB编程获取文件中集成的图标希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~
----1、在Form1的General的Declarations中定义以下两个函数:
PrivateDeclareFunctionExtractIconLib"shell32.dll"Alias"ExtractIconA"(ByValhInstAsLong,ByVallpszExeFileNameAsString,ByValnIconIndexAsLong)AsLong
ExtractIcon函数包含三个参量:
hInst表示当前的程序实例
lpszExeFileName表示包含图标的资源文件名
nIconIndex表示要取出的图标的序号
----如果nIconIndex为-1,则函数返回包含图标资源的文件的图标个数.
----从文件中取出图标资源前,应首先调用该函数获得文件中包含的图标资源的个数.
----如nIconIndex为图标资源的序号,则返回图标句柄.
PrivateDeclareFunctionDrawIconLib"user32"(ByValhdcAsLong,ByValxAsLong,ByValyAsLong,ByValhIconAsLong)AsLong
DrawIcon函数将图标画到一个图形设备上,
hdc为图形设备句柄,x,y为起始位置,
hIcon为图标句柄。
----定义三个全局变量:
DimlNumAsLong'图标的序号
DimlCountAsLong'文件中包含的图标的总数
DimastrAsString'包含图标的文件名
----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、全部源程序如下:
PrivateDeclareFunctionExtractIconLib"shell32.dll"Alias"ExtractIconA"(ByValhInstAsLong,ByVallpszExeFileNameAsString,ByValnIconIndexAsLong)AsLong
PrivateDeclareFunctionDrawIconLib"user32"(ByValhdcAsLong,ByValxAsLong,ByValyAsLong,ByValhIconAsLong)AsLong
DimlNumAsLong
DimlCountAsLong
DimastrAsString
PrivateSubCNext_Click()'浏览下一个图标
lNum=lNum 1
x1=ExtractIcon(App.hInstance,astr,lNum)
Form1.Refresh
x2=DrawIcon(Form1.hdc,10,10,x1)
CPrv.Enabled=True
IflNum=lCountThen
CNext.Enabled=False
EndIf
EndSub
PrivateSubCOpen_Click()'打开文件
Dimx1AsLong
Dimx2AsLong
CommonDialog1.ShowOpen
lCount=ExtractIcon(App.hInstance,CommonDialog1.filename,-1)
IflCount0Then
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("FileContainnoiconresource.")
CPrv.Enabled=False:CNext.Enabled=False
EndIf
EndSub
PrivateSubCPrv_Click()'浏览前一个图标
lNum=lNum-1
x1=ExtractIcon(App.hInstance,astr,lNum)
Form1.Refresh
x2=DrawIcon(Form1.hdc,10,10,x1)
CNext.Enabled=True
IflNum=0Then
CPrv.Enabled=False
EndIf
EndSub->