程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 使用 Microsoft.NET Frameworks 創建Windows應用程序

使用 Microsoft.NET Frameworks 創建Windows應用程序

編輯:關於C語言

 

使用 Microsoft.NET Frameworks 創建基於 Windows 的應用程序

Shawn Burke
Microsoft Corporation
2000年9月

摘要: :本文介紹了 Win 表單這一新的窗體程序包,借助這一程序包,開發人員能夠充分利用 Microsoft Windows 操作系統所提供的 UI 功能。

目錄

  • 簡介
  • 介紹 Win Forms
  • 更好的易學易用性
  • 布局
  • GDI+
  • 訪問底層系統
  • 結論


簡介

目前 Web 已成了街談巷議的話題,看起來好像 Microsoft? Visual Studio? 開發系統對創建基於 Microsoft Windows? 的傳統應用程序的支持有所減弱。實際上,Microsoft 對基於 Windows 的應用程序開發方面的投資在不斷加大。

Win 表單是一個新的窗體程序包,借助這一程序包,開發人員能夠充分利用 Microsoft Windows? 操作系統所提供的豐富的用戶界面功能,創建基於 Windows 的應用程序。Win Forms 是新的 Microsoft?.NET 平台的一個組成部分,它提供了許多新技術,包括通用的應用程序框架、可管理的執行環境、一體化的安全性以及面向對象的設計原則。而且,Win Forms 全面支持快速簡便地接入 Web Services 以及建立豐富的基於 ADO+ 數據模型的數據感知應用程序。得益於 Visual Studio 中新的共享開發環境,開發人員能夠使用包括 Microsoft Visual Basic? 和 C# 在內的任何支持 .NET 平台的語言創建 Win Forms 應用程序。


介紹 Win Forms

就像剛才所說的,Win Forms 是專用於 Windows 客戶機 UI 編程的 .NET Framework 的命名空間。它與 ASP+ UI 程序包(即 Web Forms)共享同樣的設計原則,但其類和實現卻全然不同。在 Microsoft Win32? API 和 Web 組件之間沒有魔術般變形的類。就像所有的 .NET Frameworks 一樣,一致性已成為優先考慮的問題。其目的是為了 Win Forms 開發人員能夠迅速適應在 Web Forms 中編寫代碼,反之亦然。例如,所有命名空間都有 Button 類,每一個都有文本、默認的 OnClick 事件以及 ForeColorBackColorFont 屬性。

Win Forms 的所有控件都基於 System.WinForms.Control 類。Control 已內置了所有基本的 HWND 功能,並且它能處理我們已經熟悉並喜愛的絕大多數通用 WM_xxxx 消息。RichControl 由 Control 派生而來,其中添加了布局邏輯和繪圖代碼。System.WinForms 命名空間中的絕大多數控件實際上都由 RichControl 派生而來。ScrollableControl 能夠支持窗口客戶區域的滾動。一般情況下,對滾動功能的支持是通過 ContainerControl 實現的,後者由 ScrollableControl 派生而來,並增加了對管理子控件、焦點問題和跨欄的支持。Form 由 ContainerControl 派生而來,是 Win Form 的頂級控件,它帶有控制標題欄、系統菜單、非矩形窗口和默認控件的屬性。UserControl 也由 ContainterControl 派生而來,是開發人員能夠創建的控件的基本類。UserControl 一般用於托管其它子控件,但對於外部客戶機來說,它又是作為單個單元出現的。UserControl 和 Form 在 Microsoft? Visual Studio.NET 中都有可視設計器,您會找到用於添加和設計由其所派生的類的項。

\

圖 1. Win Forms 控件層次結構

既然我們已了解 Win Forms 的(最)基本方面,讓我們揭開它的面紗,看看其表面下的一些相當不錯的功能。


更好的易學易用性

Win Forms 的主要目的是盡可能地提高定位到 Win32 平台的開發人員的工作效率。無論是圖形設備界面 (GDI) 還是窗口狀態管理,為 Win32 編程通常都是很困難的。例如,類似 WS_BORDER 或 WS_CAPTION 的一些窗口樣式只能在創建窗口時指定或修改。而 WS_VISIBLE 或 WS_CHILD 等其它窗口樣式則可以對已創建的窗口進行修改。Win Forms 盡力消除了這些細微的差別,並確保操作過程始終保持一致性。可以隨時地、不限次序地對 Win Forms 控件的屬性進行設置,總能產生預期效果。如果改動過程需要創建新的 HWND,Win Forms 框架能夠自動地、透明地重新生成窗口,並為其應用相適宜的所有設置。

由控件獲得通知或事件在 Win Forms 中也要容易得多。Win Forms 事件都基於稱為 Delegates 的一個通用語言運行時功能。Delegates 從本質上講是對類型安全的、可靠的函數指針。對於任一控件的任一事件,都可以添加代理處理程序;絕不會強迫您創建派生類以通過替代處理事件,創建事件映射,或僅為處理一個事件而為類的所有事件實施一個接口。也可以通過替代派生類處理事件,但這種方式一般用於控件創建者或更為高級的應用。匯集某一按鈕的 Click 事件相當簡單:

public class ButtonClickForm: System.WinForms.Form {

private System.WinForms.Button button1;

public ButtonClickForm() {

// 創建按鈕

button1 = new System.WinForms.Button();      

// 添加處理程序

button1.AddOnClick(new System.EventHandler(button1_Click));

// 將按鈕添加到窗體中

this.Controls.Add(button1);

  }



private void button1_Click(object sender, EventArgs e) {

MessageBox.Show("button1 clicked!");

  }

    }

這裡,我們創建了一個按鈕,並添加了一個名為 button1_Click 的處理程序方法,通過短短幾行代碼,在單擊該按鈕後,將調用這一方法。請注意,即使處理程序方法被標記為專用,創建這一掛鉤的代碼仍可以使用該方法,單擊按鈕後,按鈕將能夠激活這一方法的事件。

啟動 Win Forms 項目的過程也得到了簡化。使用 Visual Studio.NET 創建 Win Forms 項目的過程只會創建一個要編譯的項目文件:Form1.cs。沒有頭文件,沒有接口定義文件,沒有引導程序文件,沒有資源文件,沒有庫文件。項目所需的所有信息都包含在窗體的代碼中。這樣做有一個好處:項目由一個簡單的單窗體應用程序擴展到復雜的、帶有多個代碼文件的多窗體應用程序要方便得多。鏈接過程不需要中間對象文件,只有代碼和已構建的、受管理的所有 DLL。只要您習慣了這一方法,就能明顯地感覺到創建 .NET Framework 應用程序和創建 C/C++ 應用程序之間復雜性的不同。因為信息僅僅包含在代碼文件中,在 Visual Studio.NET 環境外創建版本的過程也非常容易,無論是 Visual Basic 代碼、C# 代碼,還是任何其它語言編寫的針對 .NET Framework 的代碼。

因為 Win Forms 建立在通用語言運行時的基礎之上,開發人員可以任選目前針對通用語言運行時的眾多語言中的一種,構建 Win32 應用程序。開發人員現在可以使用多種語言編寫 Win Forms 應用程序(或 Web Forms 應用程序或 Data 應用程序):從 C# 到 COBOL 到 Eiffel 再到 Perl 等等,中間還有很多種(上一次計數是 17 種)。方便易用再加上廣泛的應用場合相得益彰,為開發人員提供了深厚的基礎,使他們能夠迅速有效地使用 Win Forms 構建實用的應用程序。


布局

如果您曾嘗試創建能夠正常調整大小的窗體,您就會知道這一過程有多麼困難。Microsoft Foundation Classes (MFC) 或早期的 Visual Basic 版本沒有對這一功能提供內置的支持。然而現在只需幾行代碼(通常情況下您甚至不需要編寫這些代碼,因為在設計時就能通過 Property Browser 實現這些功能!),即可創建能夠正常調整大小的對話框。

基本布局由兩條組成:Anchoring 和 Docking。RichControl 有一個 Anchor 屬性,它是一種枚舉類型,可以用“或”操作將這些值組合在一起,以說明控件將與其父控件的某一邊保持恆定距離。例如,如果您將一個按鈕置於窗體上,並將 Anchor 屬性設置為 AnchorStyles.BottomRight,則在調整按鈕的大小時,按鈕將與窗體的底邊和右邊保持同一距離。此外,如果將 Anchor 設置為 AnchorStyles.All,則按鈕的各個邊都與窗體的對應邊保持同一距離,在調整按鈕大小時仍要滿足這些約束條件。

Docking 實際上是 Anchoring 的一個特殊情況。RichControlDock 屬性說明控件要將自身固定到其父控件的哪一邊。Docking 可以是 Top、Left、Right、Bottom 或 Fill。在每種情況下,控件都將移動到盡量靠近指定邊,並調整其大小,以填滿那一邊。如果父控件的大小有所調整,這一狀況仍將保持。將一個控件移

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved