VB程式設計獲取檔案中整合的圖示

freshairpeng發表於2009-03-05
----在Win95下的應用軟體使用了打量精美的圖示,而很多圖示資源是整合在EXE、DLL檔案中的(例如Win95的回收站就使用了Shell32.dll中的圖示,31號圖示表示回收站空,32號表示回收站有被刪除檔案)在我們程式設計中,可以利用Win95的API函式ExtractIcon可以將EXE、DLL檔案中的圖示資源取出,下面通過一個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)

http://www.mscto.com


CPrv.Enabled=True
IflNum=lCountThen
CNext.Enabled=False
EndIf
EndSub

PrivateSubCOpen_Click()'開啟檔案
Dimx1AsLong
Dimx2AsLong

CommonDialog1.ShowOpen
lCount=ExtractIcon(App.hInstance,CommonDialog1.filename,-1)
IflCount>0Then
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-> 軟體開發網

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14766526/viewspace-562962/,如需轉載,請註明出處,否則將追究法律責任。

相關文章