在C++Builder中使用XP视觉样式
来源:互联网 发布:淘宝商品怎么改价格 编辑:程序博客网 时间:2024/05/15 08:05
在C++Builder中使用XP视觉样式
sdragon 2006-12-28 14:53
使用C++Builder的朋友都知道,C++Builder是不支持XP视觉样式的(Vision Style)。以前我为了让自己写的程序看起来漂亮一些,拼命的去自绘控件(我没有使用过第三方界面控件,曾经安装过,但是总是出问题)。感谢C++Builder为我们提供了强大界面的支持,很多VCL控件都支持自绘,可以表现出完美的视觉效果。但是为了写这些代码,即浪费了时间,又不能使自己专心去开发软件的核心代码,有没有一种简单的方式解决这个问题呢?
答案是有的,我参阅了一些文章,用ResHacker查看了n个支持XP视觉样式的软件,发现所谓支持XP视觉样式,只是在程序的资源中添加了一个XML结构的文件,在这里称为Manifest文件。Manifest文件告诉XP系统,此程序要求XP视觉样式,于是XP系统就为这个程序使用了系统的主题视觉效果。下面我为大家展示一下Manifest文件的应用。
方式一,外部资源方式:
这种方式可以使任何未支持视觉样式的Win32程序(包括VB、Delphi等编译的可执行文件)支持视觉样式。Manifest文件内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly
xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
name="xp_style"
processorArchitecture="x86"
version="1.0.0.0"
type="win32"/>
<description>copyright by sdragon 2006-12-28 14:43</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
例如,要使C++Builder写的“Project1.exe”这个程序支持视觉样式,将以上代码复制到记事本里,另存为“Project1.exe.Manifest”到程序的目录下,格式必须是“UTF-8”,然后再打开应用程序看看!
方式二,内部资源法:
上面的方式挺有效,但总不能使每个编写的程序都背着这么个包袱吧?万一不小心丢了,特效也就没了。这就是方式二的好处了。这里我只讲C++Builder的方式,原理就是资源文件的操作,其他语言也一样。下面的是一个资源文件和Manifest文件:
//XPStyle.rc 文件内容,就一行
1 24 "XPStyle.Manifest"
//XPStyle.Manifest 文件内容
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="DelphiApplication"
version="1.0.0.0"
processorArchitecture="*"/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
<description>copyright by sdragon 2006-12-28 14:43</description>
</assembly>
将上面的文件保存好后,将XPStyle.rc加入工程,直接编译就可以看到效果了,这下大家都爽了吧!
需要说明的是,以上的方法只在WinXP以上的系统中才有效。如果你想在Win98中也使用视觉样式,那只能去用第三方控件,或埋头自绘去吧。另外,并不是所有的VCL控件都支持视觉样式,只有标准的Windows控件才支持视觉样式。以下列出不支持视觉样式的部分VCL控件:
TBitBtn、TSpeedButton
TStringGrid、TDrawGrid
TScrollBox
TValueListEditor
TTabControl、TPageControl 只在Style=tsTabs时有效。
TRichEdit 非常可惜啊,不知道RichEdit是否真的支持视觉样式,XP的写字板也是标准的凹凸边框。
附表:
Windows 3.1/95/98/ME/NT/2000 都不支持视觉效果。
下面列出支持视觉样式的系统:
Windows XP home
Windows XP Professional
Windows XP Media Center
Windows 2003 server
Windows Longhorn
以及更高级的系统
- 在C++Builder中使用XP视觉样式
- 在C++Builder中使用XP视觉样式
- 在VC中使用XP样式
- 如何在C++Builder中使用ACE
- 如何在C Builder中使用全局变量
- 如何在C++Builder中使用全局变量
- 怎样在C++Builder中创建使用DLL
- 在 C++Builder 2006 中使用 Indy10 控件!
- 在c++builder中使用createoleobject函数时?
- 怎样在C++Builder中创建使用DLL
- 使用在C++Builder 2007中DDevExtensions插件
- 在C++Builder中如何使用游戏操纵杆
- 在C++Builder中使用GDI+的流程
- 怎样在C++Builder中创建使用DLL
- 如何在C++Builder中使用Delphi控件
- 如何在C++Builder中检测硬件
- 在C++BUILDER中应用ZLIB
- 在C++Builder中自定义预览窗口
- 2007年互联网发展趋势预测:RSS将成为主流
- 超强文本编辑器SciTE配置方法详细实例
- Lesson Forty-One Penny's bag. 彭妮的提包.
- Goal:Call Parents More Often
- Lesson Forty-Three Hurry up! 快点!
- 在C++Builder中使用XP视觉样式
- Lesson Forty-Five The boss's letter. 老板的信.
- C#下WinForm编程:登录窗体的设计
- 面对游戏盗版,我们该做何回应?
- WinXP下修改网卡MAC地址
- auto_array
- JDK6的新特性之二:使用JAXB2来实现对象与XML之间的映射
- 第二书店-想看的书
- test