VC无负担实现XP风格界面

原创 2004年08月20日 23:34:00

关于让自己的程序界面实现XP风格这个问题,在网上的讨论很多,大多数的作法都是写一个.manifest文件,然后将文件名改一下,比如.exe文件为test.exe,就将这个.manifest文件改名成test.exe.manifest,并将其和test.exe放在同一个目录里,这样test.exeXP2003(必须启动Themes服务)下运行时就会呈现XP界面风格。

有件事情必须说一下,按照上面的方法,test.exe必须先调用InitCommonControls函数(已经废除,不建议使用)或者InitCommonControlsEx函数从comctl32.dll中注册组件类。这一步在VB中是必须的,但是在VCMFC程序)中,我们好像并没有调用这个函数,可是编译后的程序为什么还能实现XP风格呢?原因是MFC替我们做了这件事。如果我们是让MFC注册的窗口类,它会调用_AfxInitCommonControls函数,而_AfxInitCommonControls的主要操作就是把comctl32.dll装载进来,然后判断.dll文件中有没有InitCommonControlsEx函数,如果有就调用,没有则调用InitCommonControls,到此真相大白。可能有人和我一样,看着以“afx”开头的窗口类名称很不舒服,于是喜欢自己注册窗口类,但在我们注册自己的窗口类时一定要确保调用过InitCommonControlsEx函数,这点一定要记得,如果忘记的话你将会看到一个空白的窗口。

说了这么多,有点跑题了,呵呵。现在回到正题。我上面提到的方法很多网站上都有介绍,但是却有一个致命的缺点,就是必须有那个.manifest文件如影随形,exe文件到哪,它就得到哪,这当然是我们不愿意看到的。有没有办法能把它“合”到exe文件中呢?答案是肯定的,这也正是本文题目中“无负担”三个字的意思。

当然了,那个.manifest文件还是要有的,只不过不是和.exe文件放在同一目录中,而是把它放到资源文件中,编译后生成.res文件,link后自然就和.exe文件“合”到一起了。

首先,请出.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 manifest"

  processorArchitecture="x86"

  version="1.0.0.0"

  type="win32"/>

<dependency>

  <dependentAssembly>

    <assemblyIdentity

      type="win32"

      name="Microsoft.Windows.Common-Controls"

      version="6.0.0.0"

      processorArchitecture="x86"

      publicKeyToken="6595b64144ccf1df"

      language="*"

    />

  </dependentAssembly>

</dependency>

</assembly>

 

大家也看到了,这其实是一个XML文件,打开记事本,复制上面的内容,然后存盘,文件名任意,这里我存为XPStyle.manifest

然后在VC中新建一个MFC AppWizardexe)工程,Document/ViewDialog均可,接着把XPStyle.manifest复制到工程所在目录,再用记事本或其它文本编辑工具手动修改工程目录下的资源文件(.rc),在文件最后加上一行:

 

1 24 XPStyle.manifest

 

VC中编译并连接工程生成.exe可执行文件,运行一下看看。

就这么简单?就这么简单。   :D

这里我再多解释一下,最后加上的那一行,“1”代表资源ID,必须是“1”。“24”代表资源类型,我想我们对RT_ACCELERATORRT_BITMAPRT_MENURT_STRING等资源都非常熟悉,而“24”实际上是RT_MANIFEST。最后面引号中的东西我就不再啰嗦了。

好了,编译后的这个.exe文件拿到哪都可以,都是XP风格的界面,不用再依赖.manifest文件了。哦,当然了,必须在XP2003系统下才可以。

 

XP风格界面演示

 

     效果不错吧?!   :)

     源代码下载:http://csdngoodname008.51.net/XPStyleVC.zip
 

*-------------------------------------------*

*  转载请通知作者并注明出处,CSDN欢迎您!   *

*  作者:卢培培(goodname008              *

*  邮箱:goodname008@163.com                *

*  专栏:http://blog.csdn.net/goodname008   *

*-------------------------------------------*

 

VC无负担实现XP风格界面

关于让自己的程序界面实现XP风格这个问题,在网上的讨论很多,大多数的作法都是写一个.manifest文件,然后将文件名改一下,比如.exe文件为test.exe,就将这个.manifest文件改名成t...
  • b371569963
  • b371569963
  • 2014年03月05日 19:16
  • 527

VC无负担实现XP风格界面

有件事情必须说一下,按照上面的方法,test.exe必须先调用InitCommonControls函数(已经废除,不建议使用)或者InitCommonControlsEx函数从comctl32.dll...
  • ccx_john
  • ccx_john
  • 2013年10月25日 08:51
  • 544

如何使得WIN7下用VS2010做出的MFC程序具有XP风格(摆脱传统界面的效果)

VS2010建一个MFC的工程后,运行生成的对话框还有按钮之类的资源控件的风格是XP以前的传统的界面风格,效果不太令人满意。                                ...
  • xiaoxiaomao410
  • xiaoxiaomao410
  • 2014年09月05日 15:58
  • 2478

VC程序中Windows XP风格程序界面的实现

文章原创,转载请注明出处 默认情况下用MVC++98创建的MFC应用程序的界面使用5.82版本的ComCtrl32.dll中控件,使得其风格为Windows 2000系统的风格, 看上去绘制得比较...
  • menglongbor
  • menglongbor
  • 2013年01月17日 16:19
  • 3026

让 VB6 开发的程序拥有视觉样式( XP 风格),VC++6.0 同样适用

让 VB6 开发的程序拥有视觉样式( XP 风格),VC++6.0 同样适用。     相信用 VB6 或 VC6 开发过程序的朋友都曾郁闷过吧,VB6 或 VC6 做的程序都没有视觉样式(XP...
  • ROVAST
  • ROVAST
  • 2014年05月19日 16:58
  • 2326

VC实现XP风格控件效果(转)

VC实现XP风格控件效果 C&C++ 2008-02-15 21:28:25 阅读262 评论2   字号:大中小 订阅 一个小窍门可以方便的在VC6、VC2003、VC2005下实现XP...
  • ccx_john
  • ccx_john
  • 2013年10月25日 09:30
  • 722

使用manifest实现XP风格界面

第一种方法:是写一个.manifest文件,然后将文件名改一下,比如.exe文件为test.exe,就将这个.manifest文件改名成test.exe.manifest,并将其和test.exe放在...
  • devillixin
  • devillixin
  • 2015年09月06日 16:08
  • 1581

的负担和ifi好东方风格风格

http://rrurl.cn/60O07R http://rrurl.cn/bAVIl5 http://rrurl.cn/4DUwry http://rrurl.cn/kBAaeB http...
  • W997707499
  • W997707499
  • 2014年07月17日 00:22
  • 1

MFC 实现XP样式

对Visual C++ 6.0的程序实现XP样式: 它不仅对Visual C++ 6.0写的程序管用,对其它以前已经编写的在XP界面下显示为旧样式的程序同样有效。将下面文本保存为yo...
  • lingtianyulong
  • lingtianyulong
  • 2014年03月26日 16:47
  • 915

谈谈我是如何选择VC界面皮肤库

 选择VC界面库或皮肤库还是应当具体问题具体分析。比如: 1、如果你需要开发支持换肤功能的软件(类似千千静听、MSN、QQ等),可以使用DirectUI或DSkinlite,这类产品比较适合开...
  • yejun556688
  • yejun556688
  • 2014年07月08日 22:50
  • 1008
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC无负担实现XP风格界面
举报原因:
原因补充:

(最多只允许输入30个字)