日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WinForm UI设计与开发思路(转)

發布時間:2023/11/29 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WinForm UI设计与开发思路(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
近一年來一直在做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。
  我們首先來看一下這種實現的技術前提:
1Macromedia提供了Flash Player的ActiveX控件,可以直接嵌入到WinForm
2Flash本身提供了和Web環境類似的表單控件(TextBox,Button..)
3Flash提供了和外界的數據交換功能,可以通過FSCommand向外發送事件
4Flash內部可以使用ActionScript(一種類似JavaScript的腳本)控制其內部行為
5Flash對Http和Xml有良好的支持
6Flash支持WebService

  如果你以前不了解或熟悉Flash,當你看到這么多激動人心的特性后,大腦里已經迸發出各種思想的火花了?Flash不僅可以幫助我們在WinForm里實現各種強大的交互功能,而且可以借助于WebService,實現類似于SmartClient的富客戶端(SmartClient既不算胖也不算瘦客戶端吧)^^
  我們再來看一下除了以上幾點,Flash真正吸引我們解決文章前面提到的問題的一些特性:
1Flash基于流傳輸,非常小巧并且嵌入瀏覽器
2純Flash可以做到跨平臺
3Flash在動畫效果和用戶交互上的強大表現力
4Flash動態交互效果的容易實現(相對于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了

轉載于:https://www.cnblogs.com/liping19851014/archive/2008/04/30/1178069.html

總結

以上是生活随笔為你收集整理的WinForm UI设计与开发思路(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。