WPF UI介面的革新

2021-04-14 02:16:42 字數 1984 閱讀 6770

2023年05月02日 08:22:00

透過microsoft

對windows vista

及wpf

的強力行

銷,相信許多讀者對於wpf的ui能力只有驚豔二字可以形容,對於如何使用wpf來達到這些效果,基於雜誌與網路上已有相當多的文章討論,筆者於此就不再重述了,直接將主軸放在wpf的核心,也就是她是如何建構出達到這些效果的環境。wpf強大的ui介面來自於兩個關鍵技術,一是繪製控制項的系統,在傳統的windows程式中,多半是使用windows內建的控制項來建構ui介面,這些控制項有combobox、textbox、richtextbox、button等等,直接使用這些控制項除了可以給予使用者一致的操作介面外,也由於她們是windows內建的控制項,所以效能上也有一定程度的表現,但這樣一來,控制項的外觀也受到了限制,對於combobox中顯示多欄資料、將textbox旋轉45度等效果均難以達成,當然!許多熟悉windows的程式設計師會提出,要達到這些效果,只要不使用內建的控制項,自行建立window物件,然後繪製所要的外觀即可,是的!這的確是於過往時代達到這些效果的方法之一,但!這實在是太繁瑣了,因為除了外觀外,程式設計師還得處理相當多的訊息,簡略的說!當想製作乙個可旋轉的textbox時,程式設計師除了繪製外觀外,還得處理鍵盤、滑鼠等訊息。在wpf時代,這一切都將變得簡單,因為wpf中幾乎所有的控制項都是由wpf繪製出來的,這可以使用spy++工具來觀察windows forms與wpf程式來證實(上方是wpf程式,下方是windows forms程式)。

這兩個程式的ui介面是相同的,但讀者可以由圖中看出,windows forms(下方)的視窗中還擁有button2、button1等子控制項,但上方的wpf僅有乙個視窗,這就是wpf的big handle概念,只使用乙個windows所提供的基礎物件:window,而這個window下的所有子控制項皆為wpf所畫出並管理,所以spy++只能看到乙個基礎物件window。因為wpf是畫出控制項的,這也意味著要在wpf中將textbox旋轉是可能的,而事實上!wpf中的控制項已經提供了旋轉的能力,即使程式設計師有需求欲撰寫自訂的控制項,也只需繼承自uielement(wpf中ui控制項的基礎類別)即可擁有旋轉的能力。那麼訊息部份該如何處理呢?這就得談到wpf的第二個關鍵技術:自成一格的訊息系統,當使用者於window上移動滑鼠時,window會收到來自windows系統的wm_mousemove訊息,接著window會依據訊息中的x、y指標資訊,取得對應的uielement物件來轉送訊息,整個執行的模擬圖如下。

在wpf

的window

模式下,

dispatcher

負責收取來自

windows

的訊息,再轉送給各個視窗,也就是

window

的hwndsource

物件,此物件會一一呼叫掛載的

inputprovider

物件來處理輸入訊息,此例中掛載了兩個

inputprovider

物件:hwndkeyboardinputprovider

、、hwndmouseinputprovider

,分別處理鍵盤及滑鼠訊息,以

hwndmouseinputprovider

來說,當收到滑鼠訊息後,她會先計算滑鼠位置,找到對應的

uielement

,然後會呼叫

inputmanager

來派送訊息至該

uielement

。那dispatcher

又是由誰喚起的呢?以

window

模式的wpf

程式來說,答案是

物件的run

函式,她會呼叫

dispatcher

的run

函式,此函式會進入收取訊息的迴圈,直到此程式被關閉為止。

WPF UI介面的革新

透過 microsoft 對windows vista 及wpf 的強力行 銷,相信許多讀者對於wpf的ui能力只有驚豔二字可以形容,對於如何使用wpf來達到這些效果,基於雜誌與網路上已有相當多的文章討論,筆者於此就不再重述了,直接將主軸放在wpf的核心,也就是她是如何建構出達到這些效果的環境。wp...

WPF UI介面的革新

透過 microsoft 對windows vista 及wpf 的強力行 銷,相信許多讀者對於wpf的ui能力只有驚豔二字可以形容,對於如何使用wpf來達到這些效果,基於雜誌與網路上已有相當多的文章討論,筆者於此就不再重述了,直接將主軸放在wpf的核心,也就是她是如何建構出達到這些效果的環境。wp...

WPF UI介面的革新

透過microsoft 對windows vista 及wpf 的強力行 銷,相信許多讀者對於wpf的ui能力只有驚豔二字可以形容,對於如何使用wpf來達到這些效果,基於雜誌與網路上已有相當多的文章討論,筆者於此就不再重述了,直接將主軸放在wpf的核心,也就是她是如何建構出達到這些效果的環境。wpf...