如何让VB程序穿上漂亮外衣 — Windows Live

来源:百度文库 编辑:神马文学网 时间:2024/04/30 17:00:13
如何让VB程序穿上漂亮外衣
一直喜欢自己编一些小程序,用的IDE是Visual Basic 6.0,这个98年开发的Visual Studio6.0版IDE被沿用至今,很多程序员都很喜欢它,因此被誉为经典之作。之后微软发布的具有.NET概念的IDE作品在很长一段时间内并没有随着.NET编程架构的大力推广而火热起来。.NET架构更趋于模块化和便捷的调用方便了程序员,但是用户却不得不安装另外发布的.NETFramework运行库控件。
实际上,XP发布以后,很多用户对于XP的兴趣主要来源于新的视觉风格。但是在程序开发方面却没有很好的办法来解决对于XP视觉样式的支持问题,包括.NET。我一度也深受这个问题的困扰,正常情况下,在WindowsXP系统中,用VB6开发的应用程序只有窗口标题条具备XP风格,窗体上的按钮、文本框等控件仍然显示Windows传统风格。

WindowsXP提出了新的主题的概念不单单是壁纸、图标、颜色的差别,而是连控件都能控制的一整套视觉方案,很多Microsoft的程序都很好的继承了这一风格。而第三方呢,我也见过一些程序提出了Skin的概念,虽然界面很华丽,但是一眼看上去就是原创的控件,使用图片资源来模仿XP的风格,可能在一套主题下非常和谐,而另一套主题就会形成鲜明反差。而且程序运行时还要带上一大串aaa.dll、bbb.ocx啦,非常臃肿。
因此,我一直渴望了解,为什么XP的主题可以控制Microsoft的程序,却不能控制第三方的程序。

CSDN上的牛人给出了答案:从MSDN里的Visual Style章节知道,Windows XP通过Comctl32.dll(版本6)来加载具备XP风格的组件,应用程序则通过一个XML资源文件来通知系统来做这些。


name="XP style manifest"
processorArchitecture="x86"
version="1.0.0.0"
type="win32"/>


type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>



假设你最终编译的程序名是abc.exe,工作目录是d:\vbxp。复制上述XML内容并保存为文本文件。然后将该文件改名为abc.exe.manifest。在VB程序中,我们要在所有窗体加载之前调用InitCommonControls函数从comctl32.dll(版本6)中对组件类进行初始化。API函数InitCommonControls的声明如下:
Public Declare Sub InitCommonControls Lib "comctl32.dll" ()
初始化动作必须在所有窗体加载前完成,所以要把相关语句放到Private Sub Form_Initialize()中:
Private Sub Form_Initialize()
InitCommonControls
End Sub
编译后的abc.exe将具备XP风格,非常赞吧。

以上提及的方法不仅可以使应用程序内部的控件具备XP风格,也可以使其调用的消息框及ActiveX控件具备XP风格。但要注意,在使用工具栏、进度条等ActiveX控件时要引用Microsoft Windows Common Controls 5.0 版本(很奇怪,明明MicrosoftWindows Common Controls 6.0 版本比较高,而且XP使用的 comctl32.dll 就是 6.0的版本),否则不能使控件具备XP风格。
最后,贴一张原创的FontShow的图片吧。

下次我们来讲一讲,1、如何让VB 6.0的IDE也具有所见即所得的XP风格开发环境;2、如何让程序保持简洁,只需要一个 aaa.exe 而甩掉那个烦人的 aaa.manifest 文件,对于单文件的小工具有显而易见的好处哦。
P.S.有段时间没更新,这次写的比较学术了一点,请多包涵啦。周末预告,有重大更新哦!