minigui 採用的機制是與win32十分類似的訊息機制,基本上與win32的sdk一致。win32上經典的framework mfc 採用的是c++,物件導向的方法,自定控制項可以直接使用繼承的方式,十分方便。minigui 使用的是c語音,重所周知這是乙個面向過程的語言。但是其實它也可以使用類似c++的物件導向的思想(詳細的可以看一本叫做 《object-oriented programming with ansi-c》的書,具體的就不在這裡研究了)。minigui 本身自帶的控制項就是用c語言來模仿一些物件導向思想來實現的。
飛漫的程式設計指南上也提到了自定控制項的方法。但是與其它的章節比起來篇幅太小了 -_-||。網上這方面的資料更是少得可憐,在csdn和pudn上我可以隨便搜到mfc、vb、dephi等自定義控制項的例子,但是minigui基本上就沒看到。想當初自己研究,很費勁,走了不少彎路。現在總結了一些心得,希望開發定義控制項的弟兄們少走些彎路。
minigui
原有的控制項用乙個叫做 wndclass 的來表示。從名字就可以看出了,飛漫把這玩意當類來對待了。不過c++(物件導向的語言相對來說本人對c++比較熟悉,就拿這個舉例子了)裡的自定義控制項可都是子類化某個原有的控制項類,然後寫好類之後,例項化得到控制項物件就可以使用了。
飛漫的程式設計指南裡說到了3種方法:
1、對已經建立的控制項例項進行子類化,子類化的結果只會影響這乙個控制項例項。 2、是對某個控制項類進行子類化,將影響其後建立的所有該控制項類的控制項例項。 3、是在某個控制項類的基礎上新註冊乙個子類化的控制項類,不會影響原有控制項類。在 windows 中,這種技術又稱為超類化。
1、對已建立的控制項進(例項)行子類化 minigui 的控制項就是一類特殊的子視窗,所以它們也有自己的過程處理函式 typedef int (* wndproc) (hwnd, int, wparam, lparam) 。這種方式的實現其實就是替換掉已經建立了的控制項原來的過程出來函式。這個函式其實是每個控制項結構體變數裡乙個函式指標所指向的。通過函式指標指向不同的處理函式就能實現控制項的不同功能已經不同的屬性。再配合上每個控制項的例項資料(後面再說這個東東),是不是有點像物件導向的感覺了呢 ^_^。
這種方法只會對你替換了過程處理函式的控制項例項才生效。個人感覺比較適用的情況是:乙個工程裡,有好幾個介面用到了同乙個控制項或者乙個介面用到了好幾個控制項;但是這些控制項都是和本工程關係比較緊密的,其他工程基本上用不到的。例如:乙個專案裡需要畫n個直方圖,這些直方圖只是資料不一樣而已,繪圖方法基本一致;但是別的工程基本上用不到這個東西。其實這個用乙個函式來實現也可以,讓其傳入繪圖dc和相應的區域座標就可以了。不過我感覺用函式這種方法沒有封裝成控制項來得方便。1:函式使用的繪圖相關的變數是和父視窗相關的,用起來不怎麼方便。2:提供給工程裡別的模組使用話,在minigui這種gui程式設計中,封裝成控制項,使用訊息機制更符合minigui的程式設計方式。哎~~總之大家自己可以感受封裝成控制項的好處的,我表達能力有限,好像沒怎麼說清楚 -_-||。
不過這樣弄有點點代價。就是minigui的控制項都有自己的資料結構變數,會稍微占有一些額外的資源,不過都能跑gui的裝置了,這些應該問題不大啦。
2、對控制項類進行子類化 這種方法與上一種相比,應該算是更接近c++的自定義控制項的方法。上一種是針對原有控制項例項的,而這種是針對控制項類了。是改動整了類,正如飛漫程式設計指南上寫的,這種方法能影響到每乙個建立的控制項例項。 這種方法要是向minigui 註冊自己的類,然後自己設計控制項資料(不是指gui系統的呼叫的控制項視窗資料(這些例如客戶區、私有dc、託管視窗之類的),而是指儲存控制項某些行為的資料(例如ctrl_button裡的buttondata這一些的資料))和過程處理函式。
這種方法我個人認為比較適用用於像擴充套件按鈕(button)、編輯框(edit)、進度條(progressbar)之類的通用性比較強的控制項。例如你覺得minigui原來的button不怎麼好看,就可以自己弄乙個,然後你寫的所有工程都可以用你寫的好看的button來裝飾了。
這裡先介紹些理論的東西,之後再結合實際來講解具體的方法。
自定義控制項1
0508 算作是學習記錄吧!自定義控制項有兩部分 1 自定義view 2自定義viewgroup 先從自定義view來吧。第乙個 圓角 繼承view之後,有四個構造方法 public circleimg context context public circleimg context context...
自定義控制項(1)
今天看了下有關控制項呈現的問題。做個筆記,免得遺忘了,就不好了。dotnet類庫里,伺服器控制項都繼承自system.web.ui.controls.control類,該類提供了render,renderchildren,rendercontrol等3種方法實現控制項呈現。這些方法都使用htmlte...
Wpf 自定義控制項 1
1.新建乙個wpf工程,在工程下面新建 乙個資料夾themes,在themes下新建兩個資源字典檔案generic.xaml和prettyseekbar.xaml generic.xaml resourcedictionary xmlns xmlns x resourcedictionary.mer...