程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> VB編程獲取文件中集成的圖標

VB編程獲取文件中集成的圖標

編輯:VB綜合教程
----在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)
  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->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved