多樣、互動的WinForm UI設計與開發思路 轉載

來源:互聯網
上載者:User
多樣、互動的WinForm UI設計與開發思路(Flash、Html等)

  近一年來一直在做WinForm相關的系統,對WinForm的UI設計有一些想法想和大家討論(主要是比較忙,所以很多隻是設想,還沒有開發執行個體)
  關於WinUI,理想的情形應該是外觀比較cool,能給使用者良好的使用體驗和印象,同時又兼顧功能強大和容易開發。但基於傳統的.NET WindowsForms,恐怕除了容易開發,在其他方面的指標都很普通了。如果為了介面和功能,則複雜度會提高很多,用大量的GDI+和API操作,相 信會讓很多人頭痛不已。
  以下是一些思路:

Custom Control 寫代碼定製控制項
Shell Style 利用Shell Style工具
Flash Control 利用Flash控制項
Html Control 利用Html控制項

  編程來實現各種樣式的控制項,這個是大家比較熟悉和常用的方法,也是上面提到過的。我們現在集中來講解一下後面三種。

Windows Shell Style

  不知道大家在厭倦了Windows預設的表單和菜單後,是不是用過一些改變Windows外觀的軟體,例如StarDock公司的很多產品(WindowBlinds總知道吧)以及TGTSoft的StyleXP。

輕鬆改變Windows程式的外觀

  事實上微軟在Win2000,XP,2003系統上均引入了Visual Style的概念,也就是系統外觀主題。它提供了一些API,可以方便地修改Windows表單和控制項的整體外觀呈現。所以我們一般在改變Windows 的主題後,一般大部分程式的按鈕、形狀都會跟著改變(在.NET中可能需要將控制項的FlatStyle設成System並且 EnableVisualStyles()才會有效)

  這裡要提的是TGTSoft的StyleXP工具,它基於Windows Visual Style架構,同時又有自己的API,此外,它還有其他一些優點,比如它的每種外觀樣式,全部打包在一個DLL檔案中,同時還有相應的工具 (StyleBuilder)來製作這些樣式DLL。
  在安裝完StyleXP後,我們可以在"C:\WINDOWS\Resources\Themes\主題名稱\shell"目錄中找到該主題的DLL檔案。

StyleBuilder讓你定製自己的Windows外觀

  有了這些基礎,我們就可以在我們的程式中利用ShellStyle的API來應用這些外觀樣式,通過載入不同的資源DLL,就可以輕鬆改變軟體的外觀。當然這種方式中,你所使用的控制項還是傳統的Windows控制項,所以還是有一定局限性。
  至於如何利用ShellStyle的API,CodeProject上有一個不錯的例子:Themed Windows XP style Explorer Bar

Flash Control

  我們知道Flash的出現和廣泛流行都是由於Web環境,但Flash發展到今天,其功能已不單單局限於Web。我這裡提出的一種思路就是把Flash作為控制項應用在WinForm中。微軟研究院的Wallop就是完全用的Flash。
  我們首先來看一下這種實現的技術前提:

1 Macromedia提供了Flash Player的ActiveX控制項,可以直接嵌入到WinForm
2 Flash本身提供了和Web環境類似的表單控制項(TextBox,Button..)
3 Flash提供了和外界的資料交換功能,可以通過FSCommand向外發送事件
4 Flash內部可以使用ActionScript(一種類似JavaScript的指令碼)控制其內部行為
5 Flash對Http和Xml有良好的支援
6 Flash支援WebService

  如果你以前不瞭解或熟悉Flash,當你看到這麼多激動人心的特性後,大腦裡已經迸發出各種思想的火花了?Flash不僅可以協助我們在 WinForm裡實現各種強大的互動功能,而且可以藉助於WebService,實作類別似於SmartClient的富用戶端(SmartClient既 不算胖也不算瘦用戶端吧)^^
  我們再來看一下除了以上幾點,Flash真正吸引我們解決文章前面提到的問題的一些特性:

1 Flash基於流傳輸,非常小巧並且嵌入瀏覽器
2 純Flash可以做到跨平台
3 Flash在動畫效果和使用者互動上的強大表現力
4 Flash動態互動效果的容易實現(相對於WinForm編程來說)

FLASH外觀

HTML Control

  既然可以在應用程式中使用Flash,那麼在其中使用HTML頁面呢?當然可以,事實上這並不是一種新做法,比如微軟,就在相當長時間裡都在 它的軟體裡廣泛使用這種技術,例如MSN。在應用程式中嵌套HTML,好處自然就是可以把Application做得像Web一樣,一個網頁的外觀可以做 到哪種程度,你的控制項,表單也可以做到哪種程度。我們在一個網頁上用HTML代碼、Table表格、Form表單,各種圖片以及CSS搞出來的漂亮介面, 在WinForm中靠代碼達到相同效果可是很大的工程。而對這些介面的調整,在html裡也許很方便的改一片和css,在WinForm中可能相當於 重寫控制項。以上這些都是促使我們使用Flash Control或者Html Control的重要原因:開發、修改其內容和外觀樣式都很方便。

  在WinForm中嵌套HTML,就目前來說我們只能用COM組件WebBrowser,在.NET裡用起來不是很方便。
  關鍵問題在於,我們這裡討論的WebBrowser和HTML Control是作為軟體系統的控制項或其一部分,而並不是單純的瀏覽器作用。也就是說,我們首先在乎的是其介面,然後是其互動性,也就是這些HTML Control的容器要能夠訪問和控制這些HTML的內容和行為。
  在WinForm裡取得Html裡的控制項屬性是比較容易的,但你有沒有想過嵌套在你的WinForm裡的HTML,仍能夠訪問WinForm裡的對象呢?看看LostINet的這篇文章:
  結合 MSHTML 與 WebBrowser 產生美觀實用的 WinForm 應用程式。

  由於WebBrowser通過Navigate()方法來訪問某個指定的HTML頁面,所以這個頁面的位置無非以下幾種情況:
  1, 遠程Web伺服器,例如 http://www.tempuri.org/somepage.htm 或者 http://www.tempuri.org/somepage.aspx
  2. 本地Web伺服器,例如 http://localhost/somepage.htm 或者 http://localhost/somepage.aspx
  3. 本地檔案系統,例如 D:\mysoft\welcome.htm (只能是靜態頁面了)

  這樣的一個問題就是,當你發布你的軟體時,這些HTML需要一起發布,而且是完全暴露在使用者面前。有沒有辦法把HTML一起打包呢?

  WebBrowser需要瀏覽一個url,這沒錯,但這個Web伺服器能不能在我們的軟體啟動時,被虛擬建立出來呢?其實我們可以使用
  System.Web.Hosting.ApplicationHost.CreateApplicationHost()方法建立我們自己的Web宿主環境。
  它其實是把一個本地目錄作為根虛擬目錄,然後在記憶體裡開闢一個新的ApplicationDomain來充當Web宿主。在這個 AppDomain裡我們又可以通過 HttpRuntime.ProcessRequest(new SimpleWorkerRequest(page, query, writer)) 來處理某個請求。而這個Web宿主環境還既可以運行靜態HTML,也可以運行ASP.NET:) 也就是說我們可以用ASP.NET來開發我們的WinForm控制項,而我們的軟體內嵌了一個小型的ASP.NET伺服器。
在這裡我們可以把所有的頁面都作為資源嵌入到你的軟體裡,然後在啟動並執行時候自動把它們都釋放到一個臨時目錄,然後讓WebBrowser直接存取這個目錄,或者啟動你的Web宿主,訪問它提供的虛擬路徑。

  有沒有更好的辦法呢?我想就是自己寫一個複雜的Web宿主,能夠直接從資源檔中讀取HTML,而不是通過虛擬目錄。這樣的話我們就可以把所有用到的頁面,甚至整個網站打包到一個DLL了:)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.