一直喜歡自己編一些小程序,用的IDE是Visual Basic 6.0,這個(gè)98年開發(fā)的Visual Studio6.0版IDE被沿用至今,很多程序員都很喜歡它,因此被譽(yù)為經(jīng)典之作。之后微軟發(fā)布的具有.NET概念的IDE作品在很長一段時(shí)間內(nèi)并沒有隨著.NET編程架構(gòu)的大力推廣而火熱起來。.NET架構(gòu)更趨于模塊化和便捷的調(diào)用方便了程序員,但是用戶卻不得不安裝另外發(fā)布的.NETFramework運(yùn)行庫控件。
實(shí)際上,XP發(fā)布以后,很多用戶對(duì)于XP的興趣主要來源于新的視覺風(fēng)格。但是在程序開發(fā)方面卻沒有很好的辦法來解決對(duì)于XP視覺樣式的支持問題,包括.NET。我一度也深受這個(gè)問題的困擾,正常情況下,在WindowsXP系統(tǒng)中,用VB6開發(fā)的應(yīng)用程序只有窗口標(biāo)題條具備XP風(fēng)格,窗體上的按鈕、文本框等控件仍然顯示W(wǎng)indows傳統(tǒng)風(fēng)格。
WindowsXP提出了新的主題的概念不單單是壁紙、圖標(biāo)、顏色的差別,而是連控件都能控制的一整套視覺方案,很多Microsoft的程序都很好的繼承了這一風(fēng)格。而第三方呢,我也見過一些程序提出了Skin的概念,雖然界面很華麗,但是一眼看上去就是原創(chuàng)的控件,使用圖片資源來模仿XP的風(fēng)格,可能在一套主題下非常和諧,而另一套主題就會(huì)形成鮮明反差。而且程序運(yùn)行時(shí)還要帶上一大串a(chǎn)aa.dll、bbb.ocx啦,非常臃腫。
因此,我一直渴望了解,為什么XP的主題可以控制Microsoft的程序,卻不能控制第三方的程序。
CSDN上的牛人給出了答案:從MSDN里的Visual Style章節(jié)知道,Windows XP通過Comctl32.dll(版本6)來加載具備XP風(fēng)格的組件,應(yīng)用程序則通過一個(gè)XML資源文件來通知系統(tǒng)來做這些。
<?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> |
假設(shè)你最終編譯的程序名是abc.exe,工作目錄是d:\vbxp。復(fù)制上述XML內(nèi)容并保存為文本文件。然后將該文件改名為abc.exe.manifest。在VB程序中,我們要在所有窗體加載之前調(diào)用InitCommonControls函數(shù)從comctl32.dll(版本6)中對(duì)組件類進(jìn)行初始化。API函數(shù)InitCommonControls的聲明如下:
Public Declare Sub InitCommonControls Lib "comctl32.dll" () |
初始化動(dòng)作必須在所有窗體加載前完成,所以要把相關(guān)語句放到Private Sub Form_Initialize()中:
Private Sub Form_Initialize() InitCommonControls End Sub |
編譯后的abc.exe將具備XP風(fēng)格,非常贊吧。
以上提及的方法不僅可以使應(yīng)用程序內(nèi)部的控件具備XP風(fēng)格,也可以使其調(diào)用的消息框及ActiveX控件具備XP風(fēng)格。但要注意,在使用工具欄、進(jìn)度條等ActiveX控件時(shí)要引用Microsoft Windows Common Controls 5.0 版本(很奇怪,明明MicrosoftWindows Common Controls 6.0 版本比較高,而且XP使用的 comctl32.dll 就是 6.0的版本),否則不能使控件具備XP風(fēng)格。
最后,貼一張?jiān)瓌?chuàng)的FontShow的圖片吧。
下次我們來講一講,1、如何讓VB 6.0的IDE也具有所見即所得的XP風(fēng)格開發(fā)環(huán)境;2、如何讓程序保持簡潔,只需要一個(gè) aaa.exe 而甩掉那個(gè)煩人的 aaa.manifest 文件,對(duì)于單文件的小工具有顯而易見的好處哦。
P.S.有段時(shí)間沒更新,這次寫的比較學(xué)術(shù)了一點(diǎn),請(qǐng)多包涵啦。周末預(yù)告,有重大更新哦!
聯(lián)系客服