給.NET中的Windows表單載入Xp樣式

來源:互聯網
上載者:User

給.NET中的Windows表單載入Xp樣式  

 

介紹 

 

當Windows XP 帶著他特有的可視化樣式或者主題發布時,許多人為他擁有的華麗介面而興奮。然而,當.NET1.0正式版本發布的時候,許多人包括我自己為Windows 表單不支援Windows XP 的可視化樣式而失望。我對可視化樣式的API函數和微軟的.NET架構開發文檔進行了一番研究,而後認識到為.NET應用程式加上Xp樣式也不是很難。 

 

下面的將通過一個簡單的程式來為你的程式和控制項加上Xp樣式。內容適用於一些擁有能實現Xp樣式的屬性的控制項,通過這些屬性使他們產生Xp樣式,同時通知Windows系統為你的應用程式和控制項加上主題。 

 實現所需條件 

你需要一些條件來實現這項功能:  

         1.Microsoft .NET Framework SDK(必須)  

         2.Microsoft Visual Studio .NET,他協助你設計Windows表單(可選)  

         3.Windows XP 作業系統(可選),支援主題的正式版本作業系統 

 

進入正題 

 

開啟Visual Studio .NET 建立一個新的Windows 應用程式。在這裡我將使用C#來作為程式設計語言,因此如果你使用Visual Basic.NET,你就需要轉碼。當你建好項目後,開啟AssemblyInfo.cs檔案,在AssemblyTitle,AssemblyDescription以及AssemblyVersion中填入值,修改AssemblyDelaySign的值為true。同時你也要修改AssemblyKeyFile的值為@”..\..\KeyFile.snk”,KeyFile.snk檔案我們隨後回來建立或者拷貝一個。 

 

當你按照上面所說的完成後,你的代碼看起來應該象下面:  

using System.Reflection;

using System.Runtime.CompilerServices;

[assembly: AssemblyTitle("Theme Test")]

[assembly: AssemblyDescription("Testing Windows XP Visual Styles.")]

[assembly: AssemblyConfiguration("")]

[assembly: AssemblyCompany("")]

[assembly: AssemblyProduct("")]

[assembly: AssemblyCopyright("")]

[assembly: AssemblyTrademark("")]

[assembly: AssemblyCulture("")]  

[assembly: AssemblyVersion("1.0.0.0")]

[assembly: AssemblyDelaySign(true)]

[assembly: AssemblyKeyFile(@"..\..\KeyFile.snk")]

[assembly: AssemblyKeyName("")] 

 

現在,開啟Form1.cs表單設計介面加一些Windows表單控制項到上面,比如ListViews,Buttons,GroupBoxes,ProgressBars或者更多,下面列出了所有支援Xp樣式的孔件:

TextBox ,RichTextBox,HScrollBar ,VScrollBar ,ProgressBar ,TabControl ,MainMenu ,ContextMenu ,ComboBox ,DataGrid ,ListBox ,ListView ,TreeView ,DateTimePicker ,MonthCalendar ,Splitter ,TrackBar ,StatusBar ,ToolBar ,TreeView ,ListView 。

 

對於這些控制項,有些是預設就支援的,另外的一些特定的控制項是從ButtonBase,GroupBox,或者Label繼承而來,你需要設定他們的FlatStyle屬性為System,那些我會做一些簡短的說明。 

 

當你編譯這個應用程式後,你會發現這個Windows Forms看上去不象帶有Xp樣式,要找到原因,請往下看。 

 Windows Xp樣式的顯示原理  

簡單描述:Comctl32.dll,版本為6。Comctl32.dll,或者那些普通控制項使用了很長時間。這個動態串連庫被基礎控制項使用,同時User32.Dll提供給使用者控制項。在版本6的Comctl32.dll中,所有的控制項都放入在裡面,因此他們都支援主題。但是新版本的Comctl32.dll不象上一個版本,要使用Windows XP樣式,你必須使用包含有Comctl32.dll的作業系統,比如Windows XP。 

 

對於那些被支援的控制項,他們的樣式是同一些特殊的佈景主題資源相關的,而這些就是用來在客戶介面進行繪製。對於那些派生於ButtonBase,GroupBox和Lablel的控制項必須把FlatStyle屬性設定成FlatStyle.System枚舉值,這樣系統就可以對他們進行繪製。 

 

為了使作業系統給我們的控制項加主題樣式,你需要通知系統讓版本6的Comctl32.dll作為預設。系統預設的使用的是版本5的Comctl32.dll,對於.NET的程式也是如此,但是我們會讓程式在執行時使用版本6的Comctl32.dll。 

 

給你的項目增加一個XML檔案,檔案命取為[你的應用程式名稱].exe.manifest,[你的應用程式名稱]指得就是項目編譯產生的主exe檔案。設定編譯類型為”None”。

 

假如你的AssemblyInfo.cs中的代碼就是上面提到的那樣,那麼建立的[你的應用程式名稱].exe.manifest檔案應該為下面的樣子:   

 

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

 

<assembly

    xmlns="urn:schemas-microsoft-com:asm.v1"

    manifestVersion="1.0">

    <assemblyIdentity

        version="1.0.0.0"

        processorArchitecture="X86"

        name="Theme Test"

        type="win32" />

    <description>Testing Windows XP Visual Styles.</description>

    <dependency>

        <dependentAssembly>

            <assemblyIdentity

                type="win32"

                name="Microsoft.Windows.Common-Controls"

                version="6.0.0.0"

                processorArchitecture="X86"

                publicKeyToken="6595b64144ccf1df"

                language="*" />

        </dependentAssembly>

    </dependency>

</assembly>

 

你要適當的替換上面的”version”和”name”屬性的值,使他和你項目裡面的一樣,分別對應AssemblyVersion和AssemblyTitle屬性。那個”descryiption”元素也要同你的AssemblyDescription屬性符合。

接下去,開啟命令提示視窗修改你的項目輸出路徑,應該把”bin\Debug”作為項目路徑根目錄。假設你已經加了sn.exe強式名稱工具的路徑到你的系統內容變數,那麼在命令列中輸入如下:

sn.exe –k ..\..\KeyFile.snk

上面的步驟會產生一個KeyFile.snk公開金鑰檔案,為了使你的程式整合為強型別程式集這個公開金鑰是必須的。這個在許多情況下是必須需的。

 

最後一步添加Mnifest資訊 

 

你現在要在專案檔輸出的所在目錄。在我的例子中是一個簡單的WindowsApplication1.exe檔案,接下去會講到他。 

 

現在,退回到Visul Studio.NET,點擊檔案菜單—>開啟,瀏覽到你的應用程式比如WindowsApplication1.exe,點擊開啟他我們會看到一個資源檔管理樹。 

 

1.右鍵在根節點上點擊選擇“添加資源”。

2.點擊“匯入”按鈕,在你的項目路徑中找到WindowsApplication.exe.mnifest並開啟他。

3.在自訂資源類型對話方塊中我們輸入RT_MANIFEST然後點擊確定。

4.儲存所有檔案讓我們回到先前的資源來瀏覽樹。我們現在可以看到一個RT_MANIFEST的節點。

5.點擊選中他下面那個新加的資源檔,通常的名字是101。在屬性視窗裡修改他的ID值為1,再一次儲存你的應用程式。

6.關閉你開啟的資源瀏覽視窗回到命令列提示符下,輸入下面的命令:

sn –R WindowsApplication1.exe ..\..\KeyFile.snk

執行後會輸出一些版本資訊,最後顯示:

Assembly ‘WindowsApplication1.exe’ successfully re-signed

運行你的.NET應用程式你就會看到Windows XP樣式了。

 

概要 

 

你不需要做很多工作就可以把Windows XP 可視化樣式加入到你的應用程式和控制項。使用這些新的樣式將會帶給你的表單新的視覺,而這些經常在商業程式上用到。許多公司都花精力去開發這方面的東西,而現在你可以不用做很多工作就可以做到。 

 

請記住把那些帶有FlatStyle屬性的控制項設定為FlatStyle.System,同時在編譯你的程式後加入manifest資源就象上面的樣板檔案。當這些都做好了以後剩下的就是完成對程式集的簽名。如果你想要測試你的應用程式或者你有許可權對他進行簽名,你可以通過下面的命令關閉對程式集的驗證: 

 

sn.exe –Vr WindowsApplication1.exe 

 

立即行動,為你的應用程式加上Xp樣式,使你的產品更有特點。這樣做不會花很多時間但是效果是顯而易見的。 

 

About Heath Stewart  

Heath Stewart is a happily married software engineer originally from Nebraska and a graduate of Iowa State University in

Ames, Iowa. With nothing much to do in either state, Heath started programming early in life when gopher ruled and the Internet wasn't commercialized, and enjoys continuous research and development in new languages and frameworks. Fluent in many different programming languages, he has developed many large software solutions for companies in different areas, such as Internet filtering, intrusion detection systems, production management systems, Web sites for various purposes, and data analysis tools. He also enjoys photography. 

 

Currently, Heath is the Director of Technology at Proplanner, a Web-based Production Planning System that primarily uses .NET where he designed a multi-tiered environment and supports multiple front-ends (such as a legacy Java interface on PDM) and back-ends (such as Web Services, RDBMS's, file-based IO, and PDM). 

 

Heath is now an editor for CodeProject and is happy to help the development community as a Microsoft MVP (C#). 

1.Application.EnableVisualStyles方法(只適和.NET 1.1及以後版本支援)

在Main方法中執行Application.Run(...)方法前先執行一下Application.EnableVisualStyles()方法,可以讓接下來啟動並執行應用程式中的控制項自動套用XP的樣式。不過有幾點要注意:

所有控制項都必須保持預設的狀態,不能改變其邊框樣式及背景顏色等屬性.如果有System選項的樣式屬性(如Button的FlatStyle)則必須選擇System;

此方法在WIIN2003中可以完全正常運行,但在WIN XP中工具條上的表徵圖會不能顯示.(這個也許是XP的BUG,用下種方法可以解決這個問題);

2.加入manifest檔案(適合所有WINDOWS應用程式)

在執行檔案相同目錄中加入一個yourApplicationName.exe.manifest的XML檔案,可以迅速實現我們的需求,檔案內容如下(加底線片為需進行適當改變):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<assemblyIdentity

version="1.0.0.0"

processorArchitecture="X86"

name="CompanyName.ProductName.YourApp"

type="win32"

/>

<description>Your application description here.</description>

<dependency>

<dependentAssembly>

<assemblyIdentity

type="win32"

name="Microsoft.Windows.Common-Controls"

version="6.0.0.0"

processorArchitecture="X86"

publicKeyToken="6595b64144ccf1df"

language="*"

/>

</dependentAssembly>

</dependency>

</assembly>

轉:http://blog.csdn.net/zhzuo/archive/2004/04/22/22030.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.