VB6程序实现XP或者WIN7风格
这是一个老掉牙的问题了,现在写,一是因为我才接触这一类界面美化(以前一直以功能为主,需要漂亮界面也都是自己画的),二是发现网上的内容很多不准确,所以在这里整理一下。
1,Manifest方法(下面其它方法也都是以此为基础的)
- 用文本编辑器编写一个App.exe.Manifest文件,放到App.exe同文件夹下,注意与App同名。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentityname="XP style manifest"processorArchitecture="x86"version="1.0.0.0"type="win32"/> <dependency><dependentAssembly><assemblyIdentitytype="win32"name="Microsoft.Windows.Common-Controls"version="6.0.0.0"processorArchitecture="x86"publicKeyToken="6595b64144ccf1df"language="*"/></dependentAssembly> </dependency> </assembly>
在启动窗体代码中加入窗口初始化代码。※ 风格代码需要在加载窗体之前运行,所以不要在Form_load中初始化,否则窗口无法加载
Private Declare Sub InitCommonControls Lib "comctl32.dll" ()Private Sub Form_Initialize()InitCommonControls End Sub
或者在模块中加入类似代码,并把启动过程设置为Sub Main(),上面的简单,下面的复杂,两个实测都可用。
Private Declare Sub InitCommonControls Lib "comctl32.dll" ()Private Sub Form_Initialize()InitCommonControls End Sub
函数InitCommonControls是个空函数,不做任何事情,只改变入口点,会影响(大部分)通用控件。InitCommonControlsEx则可以指定要初始化的控件。
Private Declare Function InitCommonControlsEx Lib "comctl32.dll" (iccex As tagInitCommonControlsEx) As BooleanPrivate Type tagInitCommonControlsExlngSize As LonglngICC As Long End TypePrivate Const ICC_USEREX_CLASSES = &H200'VB实现XP风格的初始化函数Public Function InitCommonControlsVB() As Boolean On Error Resume Next Dim iccex As tagInitCommonControlsExWith iccex.lngSize = LenB(iccex).lngICC = ICC_USEREX_CLASSESEnd WithInitCommonControlsEx iccexInitCommonControlsVB = (Err.Number = 0)On Error GoTo 0End FunctionSub Main() '需要设置以此为启动函数InitCommonControlsVB '调用初始化函数Form1.ShowEnd Sub
编译后运行可以看到基础控件、Microsoft Windows Common Controls 5.0控件(6.0不行,下图右侧是6.0控件)都变成XP/Win7风格(我是在Win7下测试的,XP没看到)
2,资源(.RES)方法,即把上面的.manifest文件作为资源参与编译。要点:
- 资源类型必须是24,标识号为1,自定义无法添加(类型会有""号),所以需要使用资源编译工具。
- .manifest文件长度必须可被4整除(可以在文本末加空格凑数)。
在.manifest目录中,新建一个文本文件,内容为
1 24 App.exe.manifest
保存后将文件改名为xp.rc,然后在命令提示符下进入VB安装目录的Wizard目录(如C:\Program Files\Microsoft Visual Studio\VB98\Wizards),在提示符处输入下行命令:
rc /r 文件所在路径\xp.rc
这样,资源文件xp.res就编译好了,这个资源可以在任意工程中使用,不需要另外的处理。
3,使用工具eXeScope。打开eXeScope,选择文件->打开,打开你的程序。再选择编辑->XP样式,在对话框中确定即可。
这里是自动保存的,所以需要的话请事先备份。
4,未证实的问题:
- Form_Initialize不太保险,最好还是用Sub Main()
- 即便是使用eXeScope,也需要对程序进行处理如下(按照方法二推论,实际是不需要这个处理的)
API声明:Private Declare Function InitCommonControls Lib "Comctl32.dll" () As Long在每个窗体的初始化添加红色代码:Private Sub Form_Initialize()
InitCommonControls
End Sub在主窗口结束处添加代码,没有这些代码,程序结束后可能提示错误。Private Sub Form_Unload(Cancel As Integer)
On Error Resume Next
End
End Sub - WinXP和Win7的manifest有区别
VB6程序实现XP或者WIN7风格相关推荐
- 用VS2012或VS2013在win7下编写的程序在XP下运行就出现“不是有效的win32应用程序
问题描述: 用VC2013编译了一个程序,在Windows 8.Windows 7(64位.32位)下都能正常运行.但在Win XP,Win2003下运行时,却报错不能运行,具体错误信息为" ...
- [置顶] Windows服务(Windows Service,system权限)程序显示界面与用户交互(xp,win7通用)
[置顶] [置顶] Windows服务(Windows Service,system权限)程序显示界面与用户交互(xp,win7通用) 2012-08-20 15:04 673人阅读 评论(1) 收藏 ...
- 让用VS2012/VS2013编写的程序在XP中顺利运行
转自:http://blog.csdn.net/asanscape/article/details/38752655/ 微软为了推销自家平台,默认配置下VS2012和VS2013编写的应用程序只能在V ...
- 如何自动修复XP/VISTA/WIN7系统引导的工具(NTBootAutofix 2.02)
如何自动修复XP/VISTA/WIN7系统引导的工具(NTBootAutofix 2.02) NTBootAutofix:一款极为优秀的自动修复XP/VISTA/WIN7系统引导的工具 这个工具的用途 ...
- VMLite 安装linux系统,VMlite安装XPMode及xp、win7、linux的虚拟磁盘到D盘的方法(15页)-原创力文档...
PAGE PAGE # 1.安装 windows xp mode 图文 错误! 未疋义书签. 2. 安装ubuntu.xp.win7.等类似图文教程错误!未定义书签. 安装vmlite我就不说了,一直 ...
- XP与Win7默认下时间分隔符不同
用C#做应用开发,做了一个读取access数据库的模块,我的是Win7的系统,access数据库中有一个时间字段,时间是按照 年/月/日 的格式排列的,开始是需要把年的字段取出来,去掉月与日的数据,于 ...
- 使用 Windows XP 的外观风格
目录 简介 ComCtl32.dll 版本 6 外观风格任务 在未使用第三方扩展的应用程序中使用 ComCtl32.dll 版本 6 在使用扩展.插件或进程内运行的 DLL 的应用程序中使用 ComC ...
- 海尔轰天雷t7linux转windowxp,XP改win7系统雨林木风详细教程
最近网友想XP改win7系统雨林木风,看到雨林木风系统这么流行,也想XP升级win7系统了,这个决定是非常正确的,现在主流系统就是windows7系统,那么就让windows7之家小编告诉你们XP改w ...
- 安装Xp和Win7双系统方法(图文教程)
本人正常给同学们装系统,今天就把我装系统的经验心得给大家分享一下,希望多多支持 这里只介绍安装xp和windows7的双系统 定.实用.版本上又不如windows7,所以我而且是xp和win7在不同的 ...
- win xp和 win7 的集成版 和 安装方法
◇Windows 7 & XP SP3 2in1 集成安装版 201008◇ 写在前面: 1.目前,甚至是接下来好长一段时间,XP和WIN7将是最主流的系统,加上目前DVD-ROM已经基本取代 ...
最新文章
- objdump查看目标文件构成
- jquery serialize()无效读取不到数据
- [C++] C++风格的强制类型转换探讨
- PHP7 JIT 相关开源项目(JPHP)
- es6学习笔记-module_v1.0_byKL
- python 声明变量类型_python基础学习03数据类型和变量
- 计算机网络中的传输协议是_计算机网络中的传输方式
- 释放囚犯(洛谷-P1622)
- python小例子-Python 常用小例子
- Real Vision CEO预测以太坊币价将在今年年初达到2万美元
- PyTorch中为什么需要使用squeeze()和unsqueeze()操作?
- 微信朋友圈图片处理策略
- java二重积分_《University Calculus》-chaper13-多重积分-二重积分的计算
- 3GPP TS 23501-g51 中英文对照 | 5.3.1 General
- 5G手机的未来战事,谁抢先手?
- 点评国内SNS网站-转帖
- 2022-2-27 Leetcode 123.买卖股票的最 佳时机 III
- Linux mount/unmount命令(转)
- 【批处理DOS-CMD命令-汇总和小结】-将文件夹映射成虚拟磁盘——subst
- Deep Learning学习 之 卷积神经网络(文字识别系统LeNet-5)