在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
  以及更高级的系统 

原创粉丝点击