VB6中使用32位图标(第二版)

VB程序图标更换全攻略:从原理到实践解决EXE图标设置难题 在Windows桌面应用程序开发中,图标资源管理是软件产品化的重要环节。图标作为可执行文件的视觉标识,直接影响用户体验和软件专业度。其原理涉及资源嵌入机制,开发工具需要将图标文件编译进EXE文件的资源表中。从技术价值看,精心设计的图标能提升软件辨识度,增强用户信任感。在VB开发领域,图标设置是常见的实践需求,开发者经常需要处理窗体图标与应用程序图标的区别,以及多分辨率适配等问题。特别是在VB6和VB.NET环境中,图标设置流程存在差异,需要掌握各自的项目属性配置方法。通过理解图标文件格式要求和资源管理机制, 阅读详情

第一版参见:http://blog.youkuaiyun.com/Modest/archive/2008/05/06/2399774.aspx

本版添加了hIcon属性和SetFormIcon方法,顾名思义SetFormIcon就是实现vb6窗体的32位Icon应用。实现起来非常简单,发一个消息足矣。hIcon属性会根据图标索引返回图标句柄,用这个句柄还可以实现32位Icon在托盘中的美化应用。
(声明:魏滔序原创,转贴请注明出处。)

全部代码如下:

' ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'
  VB6中使用32位图标(第二版)
'
  Programmed by 魏滔序
'
  WebSite: http://www.chenoe.com
'
  Blog: http://blog.youkuaiyun.com/Modest
'
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
Option   Explicit

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   Sub  CopyMemory  Lib   " kernel32.dll "   Alias   " RtlMoveMemory "  ( ByRef  Destination  As  Any,  ByRef  Source  As  Any,  ByVal  Length  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  m_Data()  As   Byte
Private  m_iCount  As   Integer
Private  m_iDir  As  ICONDIR

Public   Property   Get  Count()  As   Long
    Count 
=  m_iCount
End Property

Public   Property   Get  Height( Optional   ByVal  Index  As   Long )  As   Long
    Height 
=  m_iDir.idEntries(Index).bHeight
End Property

Public   Property   Get  Width( Optional   ByVal  Index  As   Long )  As   Long
    Width 
=  m_iDir.idEntries(Index).bWidth
End Property

Public   Property   Get  Length( Optional   ByVal  Index  As   Long )  As   Long
    Length 
=  m_iDir.idEntries(Index).dwBytesInRes
End Property

Public   Property   Get  Data( Optional   ByVal  Index  As   Long )  As   Byte ()
    
Dim  o  As   Long , l  As   Long , d()  As   Byte
    o 
=  m_iDir.idEntries(Index).dwImageOffset
    l 
=  m_iDir.idEntries(Index).dwBytesInRes
    
ReDim  d(l  -   1 )
    CopyMemory d(
0 ), m_Data(o), l
    Data 
=  d
End Property

Public   Function  LoadFromData(Data()  As   Byte )  As   Boolean
    
Dim  i  As   Long
    m_Data 
=  Data
    CopyMemory m_iCount, m_Data(
4 ),  2                        ' 取得图标个数
     If  m_iCount  >   0   Then
        
ReDim  m_iDir.idEntries( 0   To  m_iCount  -   1 )           ' 图标目录结构数据
         For  i  =   0   To  m_iCount  -   1
            CopyMemory m_iDir.idEntries(i), m_Data(
6   +   Len (m_iDir.idEntries(i))  *  i),  Len (m_iDir.idEntries(i))
        
Next
        LoadFromData 
=   True
    
End   If
End Function

Public   Function  LoadFromFile( ByVal  FileName  As   String )  As   Boolean
    
Dim  hFile  As   Integer
    
Dim  Data()  As   Byte

    
If   Dir (FileName)  =   ""   Then   Exit Function
    
    hFile 
=   FreeFile
    Open FileName 
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  Form  As  Form,  Optional   ByVal  Index  As   Long   =   0 )
    SendMessageLong Form.hWnd, 
& H80,  0 , hIcon(Index)
End Sub

Private   Sub  Class_Terminate()
    
Erase  m_Data
End Sub
支持VB6的高清真彩图标资源包(含87个ico文件) htmltable {th, td {th {pre {简介:在VB6编程环境中,图标是提升用户界面视觉效果的重要元素。本资源包提供87个支持高清与真彩色(24位色深)的.ico格式图标,包含16×16和128×128像素两种尺寸,适用于不同显示场景。通过简单的代码修改窗体的Icon属性,即可将真彩图标应用于VB6程序,显著提升应用程序的专业性与用户体验。资源经测试兼容VB6环境,是界面美化与项目开发的实用工具。 阅读详情

相关推荐

modTC_Icon:让VB6支持[32位/24位]真彩色图标

  VB6本身只支持16色(4位)和256色(8位)的图标,这种图标只是早期的Windows版本所采用的 图标格式标准。现在各种高清真彩色(32位带Alpha通道、24位不带Alpha通道)早已经很流行 并且普遍使用了,但在VB6中却不能直接支持、使用。即使想把这种真彩色图标加入图标资源、 或者是把它加入ImageList控件中,也会被提示“无效图片”而不能加入。记得论坛中曾经有某 位高人说过,VB6的Form是支持真彩色图标的,可以给窗体设置真彩色图标。   昨天上午我试了一下,新建一个标准EXE工程,然后随意找了一个高清真彩图标文件,给工 程的Form1设置Icon属性,成功了……… 但是,感觉它显示的图标有点怪异,总觉得有些不对 劲呢…… 于是,我把这个高清图标文件中32×32和16×16这两种规格的真彩色图标单独提取 出来,分别保存为一个.ico格式的文件,然后再用这两个图标文件来给它设置Icon属性。果然, 这两个文件在操作时VB6都提示“无效图片”!!!这就说明:VB6是不支持真彩色图标的。最 开始时“能设置成功”,只不过是因为它从图标组中找到了256色的、它能支持的格式罢了。   闲话不多说了,这个模块进行了简单的封装,提供了一些基础的操作功能。源码中有比较 详细的注释,使用起来应该是很简单的,就不再写什么“应用示例代码”了。首先要调用接口 函数装载图标,从图标文件加载就调用LoadFromFile(),从字节数组加载就调用LoadData()。 加载成功后,即可调用其它接口来使用图标对象了,比如用GDI方式把图标画到窗口内、或者画 到某个PictureBox上、给自己的窗口或别的程序窗口设置一个真彩色图标等。虽然在“资源” 中不能以“图标”的方式把真彩图标加入,但是,却可以按“自定义资源”的方式把图标文件 装入,使用时读取出对应的资源数据,然后调用函数LoadFromData()进行加载。加载成功就可 以使用里面的真彩色图标了。   这个模块只提供了一些基本的功能,如果有需要可以自己再进行扩展。还有就是没有进行 异常处理,因此要求用来加载的文件必须是正确的图标文件、并且可以读取;数组数据则必须 是合法的图标文件数据。否则可能会引起异常,你也可以修改代码进行异常捕获处理。

教程:VB6写的32位dll插件升级支持64位Inventor

        64位现在比较流行了,所以有很多朋友想把过去用VB6写的Inventor dll插件(32位)做个升级,以便支持64位Inventor。有两种方法可以实现这个目标。一种是把dll插件修改成exe插件,第二种方法是把VB6插件转变成VB.NET插件。Brian的博客对这两种方法有非常详细地介绍。    以下转载至:http://modthemachine.typepad.co

CAD定制乐园 7000

VB6中使用32位图标

VB6中完美实现32位图标的应用

VB6使用32位图标 代码收藏

看到带Alpha通道的32位图标那绚丽性感的外表,对于无法逃离“爱美之心人皆有之”这句俗话的人(包括我)早就垂涎三尺了。对于饱读“有志者事竟成,破釜沉舟百二秦关终属楚......”的我......嗯嗯嗯,夸张的天昏地暗、飞沙走石...... 终于皇天不负苦心人(又来了,其实我官方身份是诗人。)一个Very very简单的类诞生了。说了一堆废话,还是贴上源码吧,免得被人唾骂。' VB6中使用32位图标。

470

vb6.0专用精美图标(方便、直接使用)

本文件为vb6.0专用精美图标,格式已经转化好,可以直接用于vb上,图标精美且齐全!

Get a File’s Icon

Get a File’s Icon

VB判断系统是32位还是64位

用VB来判断windows系统是32位还是64位 用VB程序来判断系统是32位还是64位,主要还是靠API来帮忙实现此功能。实现起来也很简单,先在窗体模块里申明API函数: Private Declare Function GetProcAddress Lib “kernel32” (ByVal hModule As Long, ByVal lpProcName As String) As Long Private Declare Function GetModuleHandle Lib “kernel32

weixin_53345819的博客 1541

SAP预扣税配置实战:从BP创建到外部接口集成的完整流程

本文详细拆解了SAP S/4HANA中预扣税配置与集成的完整实战流程。内容涵盖从业务伙伴(BP)架构下的数据存储理解、后台基础配置,到针对批量处理场景,如何绕过标准BAPI,采用直接更新核心表LFBW的策略进行高效开发。最后,文章探讨了与外部接口集成的多种模式与数据流设计,为财务顾问和ABAP开发人员提供了一套清晰、可落地的解决方案。

weixin_29204749的博客 415

VB使用32位图标 代码收藏

看到带Alpha通道的32位图标那绚丽性感的外表,对于无法逃离“爱美之心人皆有之”这句俗话的人(包括我)早就垂涎三尺了。感谢微软给我们选择美丽的机会,能让我们自己的软件也在外表上成为让别人倾慕甚至以身相许的筹码。想起来容易,做起来才发现整容工作原来还真没那么简单。对于饱读“有志者事竟成,破釜沉舟百二秦关终属楚......”的我......嗯嗯嗯,夸张的天昏地暗、飞沙走石...... 终于皇天不负苦

国际海员 1728

WIFI CSI动作识别数据集全解析:从数据采集到深度学习应用

本文全面解析了利用商用Wi-Fi设备的信道状态信息进行动作识别的完整流程。文章以经典WiSA数据集为例,深入剖析了CSI数据的采集原理、结构特点,并详细阐述了从原始数据预处理、特征工程到深度学习模型(如CNN-LSTM融合架构)构建与优化的关键技术,旨在为研究者提供从数据到应用的全链路实战指南。

r2s3t4的博客 281

AB SCIEX质谱数据分析实战:从PeakView入门到精通

质谱分析是现代生命科学和药物研发中不可或缺的核心技术,它通过测量离子的质荷比来鉴定和定量化合物。其基本原理是将样品离子化后,在电场和磁场中按质荷比分离,最终形成质谱图。这项技术的核心价值在于能够从复杂混合物中高灵敏度、高特异性地获取化合物的定性和定量信息,广泛应用于代谢组学、蛋白质组学、环境监测和药物分析等领域。在实际工作中,高效的数据处理平台至关重要。以AB SCIEX质谱仪生成的.wiff文件为例,其原始数据需要专业软件进行解析。PeakView软件正是这样一个综合平台,它集成了高级数据处理、谱图解析和

weixin_29053577的博客 308

下载VB6IDEMouseWheelAddin.dll让VB6支持鼠标滚轮插件

VB6IDEMouseWheelAddin.dll下载,让VB6支持鼠标滚轮插件,VB6鼠标下拉支持

Excel工作圈的博客 4513

软考-高级-信息系统项目管理第四版(完整24章全笔记)

包 括:信息系统、业务应用信息系统、信息安全系统、信息系统工程、业务应用信息系统工程和 信息安全系统工程等业务应用信息系统是支撑业务运营的计算机应用信息系统,信息安全系统工程是指为了达到建设好信息安全系统的特殊需要而组织实施的工程。项目经理由执行组织委派, 负责领导团队实现项目目标。①制定项目章程:②制订项目管理计划:③指导与管理项目工作:④管理项目知识:⑤监控项目工作:⑥实施整体变更控制:项目范围管理过程包括:规划范围管理;收集需求;定义范围;创 建WBS;确认范围;控制范围;

weixin_44934104的博客 3万+

VB如何在Win10X64位系统上进行读写64位的注册表

VB如何在Win10X64位系统上进行读写64位的注册表

键盘上的舞指 2089

帆软FineBI考试题

Flint 补录表,有批次删除功能。在分析主题内添加数据时能够选择批量添加数据。插件安装过程中有报错提示需要下载 Fine I for Excel 运行环境进行修复,修复完毕后重新安装插件。图例显示支持自定义设置,且图例标题支持隐藏显示。finebi中的指标如果想进行维度区间/真的自定义分组,不能直接拖拽到组建区域中需要先转化为维度方可进行指标分组。excel报表不支持分页。

Davina_yu的博客 1608

《QEMU/KVM源码分析与应用》读书笔记1 —— 第1章 QEMU与KVM概述

《QEMU/KVM源码分析与应用》学习笔记1 —— 第一章 QEMU与KVM概述

phmatthaus的专栏 1984

VB6如何在托盘中写入应用程序图标

  1、新建立一个VB6工程,将Form1的ShowInTaskBar属性设置为False  2、菜单:工程--添加模块 按“打开”这样就添加了一个新模块,名为Module1,保存为Module1.bas  3、在Module1中写下如下代码: Option ExplicitPublic Const MAX_TOOLTIP As Integer = 64Public Const NIF_ICON

jevylau的专栏 1048

matlab 一维相位解缠

一维相位解缠算法的matlab代码实现。

点云侠的博客 372

vb6中使软件图标在托盘

1、新建立一个VB6工程,将Form1的ShowInTaskBar属性设置为False 2、菜单:工程--添加模块 按“打开”这样就添加了一个新模块,名为Module1,保存为Module1.bas 3、在Module1中写下如下代码: Option Explicit Public Const MAX_TOOLTIP As Integer = 64 Public Const NIF

luo_yu_ Undertaker 428

【从零开始学习 UVM】1.1、UVM 概述 —— Preface

【从零开始学习 UVM】1.1、UVM 概述 —— Preface

努力,加油每一天鸭~ 826

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

清理任务栏残留图标VB6版 附源程序

今日的工作中要强制结束另外一个进程,但是那个进程却拥有任务栏图标,在强制结束后它的任务栏图标没有被清除...呵呵,网上找不到这样的的函数,不过有个Delphi版,那只有俺亲自动手改写它了,...下面是我写的VB6源代码,需要就拿去..不需要的就学习..呵呵程序设计:唐细刚清理任务栏残留图标 2006-9-20我想任何人都遇到过这样的情况:任务栏右下角的快捷图标有时并不会随着

唐古拉山的专栏 4603

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: 超酷代码:来自 COM 经验的八个教训
下一篇: 通过URL从Temporary Internet Files得到本地文件路径的函数
迈克揉索芙特
博客等级 码龄24年 865粉丝 71原创
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值