最近花了点业余时间用VB6写了个“定时关机器”
中间郁闷了几天,就是如何不载入外部ICO图标的情况下在标题栏和任务栏上添加32位图标的问题,众所周知,VB6不支持32位图标,只支持24位以下图标,但24位以下图标放置到标题栏和任务栏上很难看,百度找了很多使用32位图标都是需要载入外部图标。自己结合百度搜的结果摸索了一下,总算搞定了:
首先需要准备一个图标文件,其中包含32位和256色的32×32、24×24、16×16一共6个图标(也可以加入更大尺寸的图标),导入到Form1.Icon中,如果没有任何尺寸的256×××标将无法导入到Form1.Icon中。
主要代码 标题栏:(有个缺陷是ALT+TAB就露馅了,呵呵)
ExtractIconEx
Replace(App.Path &
"\" & App.EXEName & ".exe
", "\\", "\"), 0, 0, lHSmallIcon, 1
'提取图标句柄
SendMessageLong hWnd, WM_SETICON, 0, lHSmallIcon '设置标题栏图标
SendMessageLong hWnd, WM_SETICON, 0, lHSmallIcon '设置标题栏图标
主要代码 任务栏:
With ni
.cbSize = Len(ni)
.hWnd = MyForm.hWnd
.uID = vbNull
.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
.uCallbackMessage = WM_MOUSEMOVE
.hIcon = lHSmallIcon
.szTip = ToolTip & vbNullChar
End With
Call Shell_NotifyIcon(NIM_ADD, ni)
.cbSize = Len(ni)
.hWnd = MyForm.hWnd
.uID = vbNull
.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
.uCallbackMessage = WM_MOUSEMOVE
.hIcon = lHSmallIcon
.szTip = ToolTip & vbNullChar
End With
Call Shell_NotifyIcon(NIM_ADD, ni)
关闭窗口时记着销毁lHSmallIcon
DestroyIcon lHSmallIcon
'消毁小图标句柄
转载于:https://blog.51cto.com/lzlutao/215621