两句代码实现VB真彩色图标

3,541次阅读
没有评论

在网上找了好久,终于实现了,首先确保你Form引用的图标含有真彩色,最好8色,256色,真彩32色都有,然后在开始时插入如下代码:

SendMessage Me.hwnd, &H80, 1, ByVal LoadIcon(App.hInstance, 1)
SendMessage Me.hwnd, &H80, 0, ByVal LoadIcon(App.hInstance, 1)

当然了,如果你想深究一下,其实代码应该如下:
‘开始先声明一下

Private Const WM_SETICON = &H80
Private Const ICON_SMALL = 0
Private Const ICON_BIG = 1
'其实是利用API SendMessage和LoadIcon的API
Private Declare Function LoadIcon Lib "user32" Alias "LoadIconA" (ByVal hInstance As Long, ByVal lpIconName As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
'然后在Form Load里面加入:
SendMessage Me.hWnd, WM_SETICON, ICON_BIG, ByVal LoadIcon(App.hInstance, 1)
SendMessage Me.hWnd, WM_SETICON, ICON_SMALL, ByVal LoadIcon(App.hInstance, 1)

根据LoadIcon的API介绍,该函数可以根据当前的显示色彩选择对应的图标,但本人未进行测试,谁闲得蛋疼可以把自己电脑改成16色再试试。
注明一下,要看效果,一定要生成EXE文件后再看,在工程

另外再批判一下网上一篇本人觉得是误导人的文章:
标题:[VB窗体美化] 直接生成带真彩色图标的EXE 地址:http://hi.baidu.com/lionking1990/item/78ea36f439ea530cd99e72c4
因为即使按照其所说的方法,图标也是按256色的来显示,256色不算真彩色吧,明显是标题党。而且根据本人实际测试,如果ICO文件如果有16色的,程序其实用的还是16色的图标,只是没有那么丑而已,为什么会这样我就不知道了,但本人用ArtIcon为每个图标修改过标记,可以看出实际使用的其实是16色的图标而已。不信的人也可以去试试看。

下面公布一下本人的查阅资料:
VBGOOD论坛讨论帖的13楼与17楼才是重点 http://www.vbgood.com/thread-77674-2-1.html
VBGOOD关于LoadIcon的API手册
在VB6标题栏上显示32位真彩色图标的源码
使用32位色资源图标文件(带 Alpha 通道)
VB6的标题栏使用上真彩色图标
终于让VB6的标题栏使用上真彩色图标了!~~~ (可惜提供的工程网盘是失效的,等于没用)

然后推荐一个VB编程的外文好站,http://www.vbaccelerator.com ,上面几篇文章应该都是源自于这里(反正我觉得是,因为看更新时间这个网站都是很老的):
Providing a proper VB Application Icon, Including Large Icons and 32-Bit Alpha Images
vbAccelerator ImageList Control and Class v2.0
—————————————————————
另外顺便提供一下与LoadIcon相关的API的文章:
【VB教程】 载入、绘制图标,外源图标|
VB Loadimage 加载资源中光标

好了,就这么多了,希望能与大家分享,能让多点人少走点弯路吧(因为BLOG的问题重写了一次,累死了)

正文完
 0