龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VB开发 >

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

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
----在Win95下的应用软件使用了打量精美的图标,而很多图标资源是集成在EXE、DLL文件中的(例如Win95的回收站就使用了Shell32.dll中的图标,31号图标表示回收站空,32号表示回收站有被删除文件
----在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->

精彩图集

赞助商链接