|
四.Visual Basic .Net读取文件中的图标的实现步骤:
下面介绍的示例,其功能读取指定文件中包含的图标数目,并把这些图标全部显示出来。下面是这个示例的实现步骤:
1. 启动Visual Studio .Net。
2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。
3. 将【项目类型】设置为【Visual Basic项目】。
4. 将【模板】设置为【Windows应用程序】。
5. 在【名称】文本框中输入【Visual Basic .Net查看文件中的图标】。
6. 在【位置】的文本框中输入【E:\VS.NET项目】,然后单击【确定】按钮,这样在【E:\VS.NET项目】目录中就产生了名称为【Visual Basic .Net查看文件中的图标】文件夹,里面存放着【Visual Basic .Net查看文件中的图标】项目的所有文件。具体如图02所示:
 图02:【Visual Basic .Net查看文件中的图标】项目的【新建项目】对话框 |
7. 选择菜单【项目】|【添加新项】,在弹出的对话框中的【模板】设置为【模块】,【名称】文本框设置为【Module1.vb】后。单击【打开】按钮,则在项目中增加了一个模板文件,名称为【Module1.vb】。
8. 把Visual Stuido .Net的当前窗口切换到Module1.vb的代码编辑窗口,并在其Module1的代码区中添加下列代码,下列代码是用二种方式声明二个Windows API函数:
< System.Runtime.InteropServices.DllImport ( "Shell32.dll" ) > _ Public Function _ ExtractIcon ( ByVal src As System.IntPtr , ByVal strFileName As String , ByVal uiIconIndex As UInt32 ) As System.IntPtr End Function '声明ExtractIcon函数 Declare Auto Function Icon_Num Lib "Shell32.dll" Alias "ExtractIcon" ( ByVal src As System.IntPtr , ByVal strFileName As String , ByVal uiIconIndex As Integer ) As Integer |
9. 把Visual Studio .Net的当前窗口切换到Form1窗体的设计查看,并从【工具箱】中的【Windows窗体】选项卡中拖入下列组件到Form1窗体:
四个Label组件,其中二个用以显示提示信息,另外二个分别用以显示选择的文件名称和这个文件中包含的图标数目。
一个ListView组件,利用其显示大图标的属性用以显示选定文件中的图标。
一个OpenFileDialog组件,用以选择要查看图标的文件名称。
一个ImageList组件,它起的是桥梁的作用,首先把从文件中导出的图标存放到这里,然后再提供ListView组件显示出来。
一个Button组件。
10. 按照表01中数值来设定设定组件的主要属性:
| 组件类型 | 组件名称 | 属性 | 设置结果 | | Form | Form1 | Text | VB.NET查看文件中的图标 | | Form1 | MaximizeBox | False | | Form1 | MinimizeBox | False | | Form1 | FormBorderStyle | FixedSingle | | ListView | ListView1 | ImageList1 | LargeImageList | | ListView1 | MultiSelect | False | | ListView1 | Size | Size ( 380 , 208 ) | | Button | Button1 | Text | 选择文件 | | Button1 | FlatStyle | Flat | | ImageList | ImageList1 | Size | Size ( 32 , 32 ) | | ImageList1 | TransparentColor | Color.Transparent | | Label | Label1 | Text | 文件名称: | | Label2 | Text | 图标数目: | | Label3 | Text | "" | | Label4 | Text | "0" | 表01:【Visual Basic .Net查看文件中的图标】项目窗体中各组件的主要属性设定数值表
并按照图02中各组件的位置、大小和排列方式来调整窗体中各个组件:
 图02:【Visual Basic .Net查看文件中的图标】项目的设计界面 |
11. 把Visual Studio .Net当前窗口切换到Form.vb的代码编辑窗口,并用下列代码替换Form1.vb中的Button1组件的Click事件的处理代码,下列代码是在Button1组件的Click事件中处理查看文件中图标的功能,具体如下:
Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click If OpenFileDialog1.ShowDialog ( ) = DialogResult.OK Then '清除组件中的所有项目 ListView1.Items.Clear ( ) ImageList1.Images.Clear ( ) Dim sfName As String = OpenFileDialog1.FileName Label3.Text = sfName Dim iIcon_Num As Integer = Icon_Num ( IntPtr.Zero , sfName , -1 ) '显示文件中的图标数目 Label4.Text = iIcon_Num.ToString ( ) Dim i As Integer For i = 0 To iIcon_Num - 1 Step 1 '强制实现int到uint类型转换 Dim j As UInt32 j = System.Convert.ToUInt32 ( i ) Dim hIcon As System.IntPtr = ExtractIcon ( IntPtr.Zero , sfName , j ) '在imageList1组件中加入当然提取的图标 ImageList1.Images.Add ( Icon.FromHandle ( hIcon ).ToBitmap ( ) ) '在ListView组件中加入一个项目 ListView1.Items.Add ( "第" + ( i + 1 ).ToString ( ) + "个图标" ) '把加入项目的图象索引指向刚才加入图标在imagList1组件中的索引,从而显示图标 ListView1.Items ( i ).ImageIndex = i Next i End If End Sub |
12. 至此,在上述步骤都正确执行后,【Visual Basic .Net查看文件中的图标】项目的全部工作就完成了。单击快捷键F5就可以运行程序,此时单击【选择文件】按钮选择文件后,程序就能够读取这个文件中的图标及其数目,并显示出来了。具体如图03所示:
 图03:【Visual Basic .Net查看文件中的图标】项目的运行界面 |
五.总结:
解决Visual Basic .Net查看文件中的图标的关键并非是使用.Net框架中提供的类库,而是使用Windows的API函数。虽然这与利用Visual Basic .Net开发跨平台程序的初衷相违背,但的确不失为一种解决问题的方法。有些时候通过Windows API函数能够快捷、方便的解决实际问题,而这往往是只使用.Net FrameWork SDK所望尘莫及的,但随着.Net FrameWork SDK内容的不断丰富,各种新的组成部分和新的功能不断加入,可以预见的是,在未来的.Net FrameWork SDK中必将拥有可以替换本文中介绍的二个Windows API函数的组成部分。 |