积累系统性知识
积聚技术精华
  首页    个人中心    撰写积文    建立课题    订立目标    整理积文    管理课题    管理目标    技能Get    代码积累 
VC无负担实现XP风格界面
error997 (error997)    2014-11-20 20:21:07      目标    课题
   VC无负担实现XP风格界面
   有件事情必须说一下,按照上面的方法,test.exe必须先调用InitCommonControls函数(已经废除,不建议使用)或者InitCommonControlsEx函数从comctl32.dll中注册组件类。这一步在VB中是必须的,但是在VC(MFC程序)中,我们好像并没有调用这个函数,可是编译后的程序为什么还能实现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 AppWizard(exe)工程,Document/View或Dialog均可,接着把XPStyle.manifest复制到工程所在目录,再用记事本或其它文本编辑工具手动修改工程目录下的资源文件(.rc),在文件最后加上一行:   

  1 24 “XPStyle.manifest”  

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

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

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

  好了,编译后的这个.exe文件拿到哪都可以,都是XP风格的界面,不用再依赖.manifest文件了?  

转自 http://blog.csdn.net/y___y/article/details/1203084
(+0)技能Get

建议楼主:搜索关键字 |参考其他资源 |回复 |追问
  error997(error997):   个人中心    课题    目标    代码积累