VB6程序实现XP或者WIN7风格
這是一個老掉牙的問題了,現在寫,一是因為我才接觸這一類界面美化(以前一直以功能為主,需要漂亮界面也都是自己畫的),二是發現網上的內容很多不準確,所以在這里整理一下。
1,Manifest方法(下面其它方法也都是以此為基礎的)
- ? ? ? 用文本編輯器編寫一個App.exe.Manifest文件,放到App.exe同文件夾下,注意與App同名。
- <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentityname="XP style manifest"processorArchitecture="x86"version="1.0.0.0"type="win32"/>
<dependency><dependentAssembly><assemblyIdentitytype="win32"name="Microsoft.Windows.Common-Controls"version="6.0.0.0"processorArchitecture="x86"publicKeyToken="6595b64144ccf1df"language="*"/></dependentAssembly>
</dependency>
</assembly>
在啟動窗體代碼中加入窗口初始化代碼?!?風格代碼需要在加載窗體之前運行,所以不要在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 BooleanPrivate Type tagInitCommonControlsExlngSize As LonglngICC As Long
End TypePrivate Const ICC_USEREX_CLASSES = &H200'VB實現XP風格的初始化函數Public Function InitCommonControlsVB() As Boolean
On Error Resume Next
Dim iccex As tagInitCommonControlsExWith iccex.lngSize = LenB(iccex).lngICC = ICC_USEREX_CLASSESEnd WithInitCommonControlsEx iccexInitCommonControlsVB = (Err.Number = 0)On Error GoTo 0End FunctionSub Main() '需要設置以此為啟動函數InitCommonControlsVB '調用初始化函數Form1.ShowEnd Sub
編譯后運行可以看到基礎控件、Microsoft Windows Common Controls 5.0控件(6.0不行,下圖右側是6.0控件)都變成XP/Win7風格(我是在Win7下測試的,XP沒看到)
?
2,資源(.RES)方法,即把上面的.manifest文件作為資源參與編譯。要點:
- 資源類型必須是24,標識號為1,自定義無法添加(類型會有""號),所以需要使用資源編譯工具。
- .manifest文件長度必須可被4整除(可以在文本末加空格湊數)。
在.manifest目錄中,新建一個文本文件,內容為
1 24 App.exe.manifest
保存后將文件改名為xp.rc,然后在命令提示符下進入VB安裝目錄的Wizard目錄(如C:\Program Files\Microsoft Visual Studio\VB98\Wizards),在提示符處輸入下行命令:
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有區別
總結
以上是生活随笔為你收集整理的VB6程序实现XP或者WIN7风格的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么用PHP修改文字大小,如何利用PHP
- 下一篇: DOM-4 【utils/待讲评】节点创