Option Explicit
'======== clsIcon.cls ========
Private Type ICONDIRENTRY
bWidth As Byte
bHeight As Byte
bColorCount As Byte
bReserved As Byte
wPlanes As Integer
wBitCount As Integer
dwBytesInRes As Long
dwImageOffset As Long
End Type
Private Type ICONDIR
idReserved As Integer
idType As Integer
idCount As Integer
idEntries() As ICONDIRENTRY
End Type
Private Declare Function CreateIconFromResourceEx Lib "user32" (presbits As Byte, ByVal dwResSize As Long, ByVal fIcon As Long, ByVal dwVer As Long, ByVal cxDesired As Long, ByVal cyDesired As Long, ByVal uFlags As Long) As Long
Private Declare Function DrawIconEx Lib "user32.dll" (ByVal hdc As Long, ByVal xLeft As Long, ByVal yTop As Long, ByVal hIcon As Long, ByVal cxWidth As Long, ByVal cyWidth As Long, ByVal istepIfAniCur As Long, ByVal hbrFlickerFreeDraw As Long, ByVal diFlags As Long) As Long
Private Declare Function DestroyIcon Lib "user32" (ByVal hIcon As Long) As Long
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Private iCount As Integer
Private iDir As ICONDIR
Private lpData() As Byte
Public Property Get Count() As Long
Count = iCount
End Property
Public Property Get Height(Optional ByVal Index As Long) As Long
Height = iDir.idEntries(Index).bHeight
End Property
Public Property Get Width(Optional ByVal Index As Long) As Long
Width = iDir.idEntries(Index).bWidth
End Property
Public Property Get Length(Optional ByVal Index As Long) As Long
Length = iDir.idEntries(Index).dwBytesInRes
End Property
Public Property Get Data(Optional ByVal Index As Long) As Byte()
Dim p As Long, l As Long, d() As Byte
p = iDir.idEntries(Index).dwImageOffset
l = iDir.idEntries(Index).dwBytesInRes
ReDim d(l - 1)
CopyMemory d(0), lpData(p), l
Data = d
End Property
Public Function LoadFromData(Data() As Byte) As Boolean
Dim i As Long
lpData = Data
CopyMemory iCount, lpData(4), 2 '取得图标个数
If iCount > 0 Then
ReDim iDir.idEntries(0 To iCount - 1) '图标目录结构数据
For i = 0 To iCount - 1
CopyMemory iDir.idEntries(i), lpData(6 + Len(iDir.idEntries(i)) * i), Len(iDir.idEntries(i))
Next
LoadFromData = True
End If
End Function
Public Function LoadFromFile(ByVal lpFileName As String) As Boolean
Dim hFile As Integer
Dim Data() As Byte
If Dir(lpFileName) = "" Then Exit Function
hFile = FreeFile
Open lpFileName For Binary As #hFile
ReDim Data(LOF(hFile) - 1)
Get #hFile, , Data
Close #hFile
LoadFromFile = LoadFromData(Data)
End Function
Public Property Get hIcon(Optional ByVal Index As Long) As Long
Dim d() As Byte, l As Long, w As Long, h As Long
d = Data(Index): l = Length(Index)
w = Width(Index): h = Height(Index)
hIcon = CreateIconFromResourceEx(d(0), l, 1, &H30000, w, h, 0)
End Property
Public Function Draw(ByVal hdc As Long, ByVal x As Long, ByVal y As Long, Optional ByVal Index As Long = 0) As Boolean
Dim w As Long, h As Long
w = Width(Index): h = Height(Index)
Draw = DrawIconEx(hdc, x, y, hIcon(Index), w, h, 0, 0, 3) <> 0
DestroyIcon hIcon
End Function
Public Sub SetFormIcon(ByVal lhWnd As Long, Optional ByVal Index As Long = 0)
SendMessageLong lhWnd, &H80, 0, hIcon(Index)
End Sub
Private Sub Class_Terminate()
Erase lpData
End Sub
'使用如下代码更改一个窗口的图标
If Dir(App.Path & "/Icon.ico") = "" Then Exit Sub 'Function
Dim ic As New clsIcon
ic.LoadFromFile App.Path & "/Icon.ico"
ic.SetFormIcon Me.hWnd 'hWnd Of a Window
Set ic = Nothing
分享到:
相关推荐
VB6中完美实现32位图标的应用
VB6本身只支持16色(4位)和256色(8位)的图标,这种图标只是早期的Windows版本所采用的 图标格式标准。现在各种高清真彩色(32位带Alpha通道、24位不带Alpha通道)早已经很流行 并且普遍使用了,但在VB6中却不能直接...
VB企业版安装包自带的图标文件,供Visual Basic程序员使用
VB源码 修改桌面图标背景,另一个源码,参考
见好多人问怎么更改VB程序的默认图标,自己也看腻了,索性修改了一个传上来,没什么技术含量,有兴趣的就下来看看吧。新图标类似.net的默认图标,白底蓝边,自我感觉挺清爽的。 注: 1. 更改的是编译后程序的默认...
VB6.0仿迅雷悬浮窗口(图标)的实现源码,迅雷的悬浮窗相信大家很熟悉了,其实就是显示一个图标,悬浮在屏幕上,通过这个悬浮图标可单击右键调出菜单,双击图标则会显示主窗口,本源码模拟了悬浮窗口的实现,另外是...
VB菜单中添加小图标VB菜单中添加小图标VB菜单中添加小图标
vb托盘动态图标源码
VB让菜单中出现图标,在窗口菜单前面加入小图标,本例演示了怎样在菜单中加入图标的方法,例中使用了三个WINAPI函数,利用这三个函数,我们可以对菜单进行定义。例子的一个缺陷是没有使用两张不同的图标来表示复选的...
vb 常用icon图标,个性化自己的程序必备
VB自带的图标都很丑,本工具对生成的EXE文件图标能够快捷的替换,可以换成各种自己希望的ico格式的图标,非常方便
可以支持VB6的真彩图标,修改form的ICO属性就可以设置。 共87个,16*16 128*128 有很多漂亮的
这里有VB6.0可用的ICO图标,样式很多,可供选择
VB ICO图标制作软件源代码VB ICO图标制作软件源代码VB ICO图标制作软件源代码VB ICO图标制作软件源代码VB ICO图标制作软件源代码VB ICO图标制作软件源代码VB ICO图标制作软件源代码VB ICO图标制作软件源代码VB ICO...
VB源码 自定义文件夹图标,供大家参考,谢谢
VB编程源代码 29提取可执行文件内部所有图标VB编程源代码 29提取可执行文件内部所有图标VB编程源代码 29提取可执行文件内部所有图标VB编程源代码 29提取可执行文件内部所有图标VB编程源代码 29提取可执行文件内部...
开发中的,有不少功能还没完善,不过常用功能已经有了。 预计开发成一个脚本解析式的解析器。可以做成简单的windows程序自动化处理脚本。
VB6.0修改EXE文件图标,是修改图标不是修改EXE文件,只把EXE内包含的图标给修改掉,自定义个性的EXE程序图标,操作时候,选择你要更改的EXE文件的址,再选择一个你准备好的图标文件,点击“修改图标”,原EXE文件的...
VB遍历其他程序的子窗口,纯API实现。
VB-icon图标大汇集,包括Windows自带图标!VB-icon图标大汇集,包括Windows自带图标!VB-icon图标大汇集,包括Windows自带图标!VB-icon图标大汇集,包括Windows自带图标!VB-icon图标大汇集,包括Windows自带图标!