栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

VB6程序实现XP或者WIN7风格

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

VB6程序实现XP或者WIN7风格

这是一个老掉牙的问题了,现在写,一是因为我才接触这一类界面美化(以前一直以功能为主,需要漂亮界面也都是自己画的),二是发现网上的内容很多不准确,所以在这里整理一下。

1,Manifest方法(下面其它方法也都是以此为基础的)

  •       用文本编辑器编写一个App.exe.Manifest文件,放到App.exe同文件夹下,注意与App同名。
  • 
    
    
    
        
            
        
    
    

    在启动窗体代码中加入窗口初始化代码。※ 风格代码需要在加载窗体之前运行,所以不要在Form_load中初始化,否则窗口无法加载

  • Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
    
    Private Sub Form_Initialize()
    	InitCommonControls
    End Sub

    或者在模块中加入类似代码,并把启动过程设置为Sub Main(),上面的简单,下面的复杂,两个实测都可用。

  • Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
    
    Private Sub Form_Initialize()
    	InitCommonControls
    End Sub

    函数InitCommonControls是个空函数,不做任何事情,只改变入口点,会影响(大部分)通用控件。InitCommonControlsEx则可以指定要初始化的控件。

 

  • Private Declare Function InitCommonControlsEx Lib "comctl32.dll" (iccex As tagInitCommonControlsEx) As Boolean
    
    Private Type tagInitCommonControlsEx
        lngSize As Long
        lngICC As Long
    End Type
    
    Private Const ICC_USEREX_CLASSES = &H200
    
    'VB实现XP风格的初始化函数
    
    Public Function InitCommonControlsVB() As Boolean
    On Error Resume Next
    Dim iccex As tagInitCommonControlsEx
    
        With iccex
            .lngSize = LenB(iccex)
            .lngICC = ICC_USEREX_CLASSES
        End With
        
        InitCommonControlsEx iccex
        InitCommonControlsVB = (Err.Number = 0)
    
        On Error GoTo 0
    
    End Function
    
    
    Sub Main()                  '需要设置以此为启动函数
    
        InitCommonControlsVB    '调用初始化函数
        Form1.Show
    
    End Sub

    编译后运行可以看到基础控件、Microsoft Windows Common Controls 5.0控件(6.0不行,下图右侧是6.0控件)都变成XP/Win7风格(我是在Win7下测试的,XP没看到)

IDE界面
修改后运行界面

 

2,资源(.RES)方法,即把上面的.manifest文件作为资源参与编译。要点:

  • 资源类型必须是24,标识号为1,自定义无法添加(类型会有""号),所以需要使用资源编译工具。
  • .manifest文件长度必须可被4整除(可以在文本末加空格凑数)。

在.manifest目录中,新建一个文本文件,内容为

1 24 App.exe.manifest

保存后将文件改名为xp.rc,然后在命令提示符下进入VB安装目录的Wizard目录(如C:Program FilesMicrosoft Visual StudioVB98Wizards),在提示符处输入下行命令:

rc /r 文件所在路径xp.rc

这样,资源文件xp.res就编译好了,这个资源可以在任意工程中使用,不需要另外的处理。

3,使用工具eXeScope。打开eXeScope,选择文件->打开,打开你的程序。再选择编辑->XP样式,在对话框中确定即可。

这里是自动保存的,所以需要的话请事先备份。

4,未证实的问题:

  • Form_Initialize不太保险,最好还是用Sub Main()
  • 即便是使用eXeScope,也需要对程序进行处理如下(按照方法二推论,实际是不需要这个处理的)   API声明: Private Declare Function InitCommonControls Lib "Comctl32.dll" () As Long   在每个窗体的初始化添加红色代码: Private Sub Form_Initialize() 
       InitCommonControls 
    End Sub   在主窗口结束处添加代码,没有这些代码,程序结束后可能提示错误。 Private Sub Form_Unload(Cancel As Integer) 
    On Error Resume Next
       End
    End Sub
  • WinXP和Win7的manifest有区别
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/954672.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号