| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2115 人关注过本帖
标题:VB6.0中的控件如何无负担实现XP风格界面?
只看楼主 加入收藏
foshan
Rank: 1
等 级:新手上路
威 望:2
帖 子:605
专家分:0
注 册:2006-3-1
结帖率:100%
收藏
 问题点数:0 回复次数:4 
VB6.0中的控件如何无负担实现XP风格界面?

VC无负担实现XP风格界面


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


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

  说了这么多,有点跑题了,呵呵。现在回到正题。我上面提到的方法很多网站上都有介绍,但是却有一个致命的缺点,就是必须有那 个.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.m anifest。  

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

  1 24 “XPStyle.manifest” 

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

  就这么简单?就这么简单。   

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


仔细看后几段就会发现关键所在 呵呵!

搜索更多相关主题的帖子: 控件 界面 负担 风格 
2006-03-05 11:01
foshan
Rank: 1
等 级:新手上路
威 望:2
帖 子:605
专家分:0
注 册:2006-3-1
收藏
得分:0 
上面的文章介绍的是在VC环境中的方法,在VB 6.0的环境中,又应如何实现呢?谢谢大家!
e1bP54GJ.rar (70.59 KB) VB6.0中的控件如何无负担实现XP风格界面?



我是2.0超级菜鸟,请多多教导!
2006-03-05 11:02
小伟的小伟
Rank: 1
等 级:禁止访问
帖 子:122
专家分:0
注 册:2006-1-25
收藏
得分:0 
VB的在工程中加入:
Private Declare Sub InitCommonControls Lib "comctl32.dll" ()

Private Sub Form_Initialize()
InitCommonControls
End Sub 

2006-03-05 13:09
appder
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-7-25
收藏
得分:0 
第四行 name="XP style manifest"需要根据自己的程序修改吗?
2009-07-25 11:04
adffdda
Rank: 2
等 级:论坛游民
帖 子:98
专家分:15
注 册:2015-1-6
收藏
得分:0 
不错,学习了
2017-03-08 22:34
快速回复:VB6.0中的控件如何无负担实现XP风格界面?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015988 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved