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

2016-02-19 21:08 10 1 收藏

图老师小编精心整理的VB编程获取文件中集成的图标希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~

【 tulaoshi.com - 编程语言 】

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

来源:http://www.tulaoshi.com/n/20160219/1625368.html

延伸阅读
标签: Web开发
一、引言 如今,有相当多的Web应用程序,如Backpack,Blinksale和Gmail,都把数据库技术与AJAX集成到一起。 通过提供与数据库通讯而不用刷新浏览器这种强有力的技术,这种集成对web应用程序和用户体验产生巨大的影响-这意味着,在用户继续其它交互的同时可以实现实时的数据传输。 本文将集中讨论上述技术集成机理。同时提供了完...
----欣喜看到VB编程人和爱好者的阵营越来越大了,而现在VB6也已经横空出世了,在这里献上自己的一点VB5编程的小经验,权当和广大朋友交流交流,不妥之处多多指教。 ----1.在打开对话框中同时显示多种类型的文件 ----在打开文件时,我们往往会用到打开对话框CommonDialog,要把文件类型限制在一定的范围内得用CommonDialog的Fi...
问:我在学习VB过程中遇到一个问题,如源代码: SndPlaySound(″c:MyWorkeep.wav″) 在制成安装盘后,安装到其它机器中不同目录下就不能执行,必须安装到C:MyWork下才能执行。怎样在源代码中识别,或有更好的办法。 答:这是初学者经常忽略的一个小问题。在打开文件、调用程序时喜欢使用绝对文件路径。其实,只要使用相对路径,就...
标签: Web开发
一、引言 如今,有相当多的Web应用程序,如Backpack,Blinksale和Gmail,都把数据库技术与AJAX集成到一起。通过提供与数据库通讯而不用刷新浏览器这种强有力的技术,这种集成对web应用程序和用户体验产生巨大的影响。 这意味着,在用户继续其它交互的同时可以实现实时的数据传输。 本文将集中讨论上述技术集成机理。同时提供了完整的参考源...
一. 注册表的API编程 关于注册表的知识相信您通过前面专题的介绍已经有了较深入的了解。系统有六个预定义好的关键字,这六个关键字是用户或系统访问注册表的入口点。我们常用到的只有前四个关键字。而在编程时我们一般用到只是HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE这两个关键字,因为与应用程序相关的数据存在于这两个关键字下。 许多商品...

经验教程

605

收藏

62
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部