




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
本文格式為Word版,下載可任意編輯——Net(C)自定義WinForm控件之BalloonWindow.Net(C#)自定義WinForm控件之BalloonWindow
寫在前面:使用Tooltip的時候,大家都會覺得有不足夠的地方,如,在使用圖片時,很不便利,如,要增加ToolTip的自動時(探尋內(nèi)容等)不便利。普通都會想,假使ToolTip是一個Form,那什么問題都
好解決了。下面就介紹一個ToolTip,它的本質(zhì)是一個Form。
介紹此款用戶控件的源網(wǎng)址是:http://./KB/miscctrl/balloonnet.aspx
設(shè)計剖析
將Form變成ToopTip形狀,可以設(shè)置顯示的時間,關(guān)閉和開啟的動作等
布局
要把一個Form變成一個Tooltip形狀,那需要解決的問題有:源指向,也就是需要提醒的控件或位置,上圖所示,就是label4,要設(shè)計源指向的形狀,至少設(shè)計為一個三角形,有一個頂點指向源控件。Form
的標(biāo)題區(qū)域取消,F(xiàn)orm的四邊要變成橢圓形狀,整個ToopTip的邊框是可以設(shè)置邊框顏色的。
動作與方法
從源文件中,可以發(fā)現(xiàn)兩個重要的入口,
WndProc(refSystem.Windows.Forms.Messagem)
RecalcLayout()
眾所周知,WndProc是消息處理的函數(shù),源文件對三個消息進行了加工和處理,它們是WM_NCCALCSIZE,WM_NCPAINT,WM_NCHITTEST,三個消息的含義是這樣的
WM_NCCALCSIZE消息在需要計算窗口客戶區(qū)的大小和位置時發(fā)送。通過處理這個消息,應(yīng)用程序可以
在窗口大小或位置改變時控制客戶區(qū)的內(nèi)容。
WM_NCPAINT用于重畫窗口的非用戶區(qū),如標(biāo)題,邊框和滾動桿。
WM_NCHITTEST訊息是一個很特別的訊息。它是用來決定目前滑鼠所在位置屬性的訊息,因此我們可以利用此特性,當(dāng)滑鼠移至指定的位置時,傳回HTCAPTION,使得系統(tǒng)以為滑鼠目前位於標(biāo)題棒,如此就
可以移動視窗了。
正是利用了這三個方法,使得Form的形狀變成ToopTip一樣,下面,就算有了一個形似ToolTip的Form,我們,還是差一點,就是ToopTip的定位,往往在屏幕邊界時,ToopTip的位置需要一定的調(diào)整,特別
是那個小的三角形,隨著頂點位置的不同,就要作不同的變形。
下面是RecalcLayout的部分代碼,看到了,下面的形式,就是計算邊框和四角的大小和位置的。
強,而可使用面更寬。
其它
假使,可以設(shè)置一下,不出現(xiàn)三角形的指向,那么更好。
BalloonWindow是一個比較好的控件,好多的方法都提供了重寫功能,這樣,使到控件的適應(yīng)性大大加
.Net(C#)自定義WinForm控件之MessageBalloon
寫在前面:.Net自帶有標(biāo)準(zhǔn)的控件Tooltip,但是,在使用過程中,也有不合人意的時候,如自動關(guān)閉的問題,或怎樣關(guān)閉提醒,提醒顯示多長時間的問題。下面介紹一個比較好用的Tooltip自定義控件Message
Balloon,通過對些控件的一些簡單的介紹,希望大家可以找到自已喜歡的Tooltip控件。
介紹這一款控件的源網(wǎng)址是:http://./KB/shell/balloontipsarticle.aspx也是想構(gòu)造一個比較好用的Tooltip,正如所說,Tooltip用得好,是有很大幫助的,不過,用得不好,
真是煩人的。設(shè)計剖析
在.Net(C#)的平臺下使用標(biāo)準(zhǔn)的API接口,創(chuàng)立Tooltip窗口
布局
定位ToolTip的位置,然后彈出Tooltip界面,界面中包括圖標(biāo),文字標(biāo)題,文字內(nèi)容和關(guān)閉窗口的功能。
Tooltip界面的顯示時間是沒有限制的,點擊時隱蔽,而點擊“HideTip〞也可以隱蔽。
動作與方法外部調(diào)用接口有構(gòu)造函數(shù):MessageBalloon()
MessageBalloon(Controlparent)
顯示與隱蔽:Show()Hide()重要的方法有
顧名思義,下面的方法是創(chuàng)立Tooltip界面和設(shè)計界面的位置
CreateTool()SetBalloonPosition()
下面是CreateTool的方法體,也就是創(chuàng)立Tooltip的全過程,可以看到,大部分的功能都是由標(biāo)準(zhǔn)的API
來組成的。由此可見,做自定義界面控件調(diào)用標(biāo)準(zhǔn)API是少不了的。
其中SendMessage,SetWindowPos等的語法,跟C++基本上是一致的。
字體格式選擇ComboBox控件
寫在前面:當(dāng)我們在使用MicrosoftWord這個軟件時,經(jīng)常會使用到字體選擇功能,如宋體,黑體,隸書之類,是一個下拉框的功能,當(dāng)前,這個,在.Net的標(biāo)準(zhǔn)控件中,是一個叫ComboBox的控件,那么,
下面介紹的,就當(dāng)然是FontComboBox了,自定義字體選擇ComboBox。
介紹此控件的源網(wǎng)址是:http://./KB/combobox/CGFontCombo.aspx和普通的ComboBox最大的不同就是下拉的內(nèi)容,是顯示不同的字體的。用戶選擇不同的內(nèi)容后,可以
讓別的控件的字體顯示選擇的字體。
設(shè)計剖析
重寫ComboBox的DrawItem方法,畫我們需要的Item。
布局
使用了一個ComboBox以輔助顯示和定位,而僅僅在DrawItem方法中,用我們所需要的樣式來顯示
動作
如下圖所示,程序在構(gòu)造函數(shù)中就訂閱了三個事件,并針對這些事件做處理,
DrawItem,SelectedIndexChanged,FontChanged。
同時,重寫了句柄創(chuàng)立方法,在CreateSampleFonts中對控件ComboBox的內(nèi)容進行填充,填充所有
的字體庫,
注意到,在畫ComboBox的Item時,每畫一個,都是按Item的內(nèi)容來畫的。
對FontComboBox的介紹就到此
帶幽美外觀的UserControl控件GroupBox
寫在前面:假使大家覺得.Net自帶的GroupBox控件太差了,樣子很不美觀,而想用.Net強大的自定義功能來實現(xiàn)定制控件,如,在GroupBox的Title那里加個Button形狀的東西,給GroupBox的四周的角都變成圓的,給GroupBox加個背風(fēng)景,并且有過渡效果。那,請您看看,下面的效果圖,是不是您所
需要的?就是不是你需要的,但是不是有很大的參考價值?應(yīng)當(dāng)是吧。
介紹此自定義控件的源網(wǎng)址是:http://./KB/miscctrl/grouper.aspx代碼是用C#來寫的。在那里,你可以下載到自定義控件的源碼,不過,請您尊重的原創(chuàng)。
設(shè)計剖析
新自定義一個UserControl,然后按GroupBox的樣子畫出控件。
布局
不繼承GroupBox而直接新建一個UserControl控件,需要勇氣和技術(shù),GroupBox有如下的部分:標(biāo)題,也就是GroupBox左上角部分,在此控件中,被打包成一個Button的樣子,Button的四個角都是平滑而有弧度的,而且,可以放圖片,可以定義控件的固定位置,如UserControl的Left,Top設(shè)計好,然后開始畫這個Button,而Shadow也是通過畫橢圓弧來實現(xiàn)的,Button中的過渡色,可以通過LinearGradientBrush等類提供的方法來實現(xiàn),Brush中提供了一,二和三維的顏色方案。GroupBox的角,橢圓弧和Shadow也是這樣畫出來的,這需要編程者,有比較深厚的GUI經(jīng)驗和耐心
的調(diào)試。對于GroupBox的內(nèi)部,使用UserControl默認(rèn)的容器形式。
根據(jù)這樣的布局,產(chǎn)生了多個屬性的設(shè)置,如源背風(fēng)景,過渡后的背風(fēng)景,Title的弧度,GroupBox的弧
度等。動作
.Net標(biāo)準(zhǔn)GroupBox本身自帶的動作并不是好多,這也是自定義控件在布局做得很強的原因,由于根本不用寫動作的。一般只會有Resize的動作,這樣,要激發(fā)重畫的動作。而整個自定義控件設(shè)計的畫路也是比較的簡單的,在OnPaint方法上面做了所有的動作。包括畫GroupBox和Button等內(nèi)容。
運行時元素選擇工具PickBox
寫在前面:所謂PickBox控件,就是一個在程序運行時可以調(diào)整控件大小和拖動控件的一個功能,當(dāng)前,
把這個功能做成一個控件,就有PickBox控件了,可以理解為控件的選擇功能的“控件〞。
PickBox控件的原描述網(wǎng)站在
http://./KB/miscctrl/CSPickBoxSample1.aspx
在那里,你可以下載到源代碼。
控件運行的效果圖如下,選中定一個控件,如Label時,Label的四周,共8個位置就出現(xiàn)小的正方形,把鼠標(biāo)放到正方形上,就鼠標(biāo)就變成標(biāo)準(zhǔn)的Resize效果,而其它地方,就出現(xiàn)移動的效果。拖動之后,
Label的位置就會變化。
設(shè)計剖析
捕獲運行時的控件的位置和焦點所在,畫一個外殼在控件的邊界,實現(xiàn)拖動
布局問題
在程序運行時,對于選定的控件,也就是獲取焦點的控件,提取其Size和Location信息,并在控件的四個角上,增加一個小正方形,小正方形的大小是固定的,控件的頂點在小正方形的中心位置。在四條邊的中間都放一個小正方形,小正方形的中心在邊上。光標(biāo)形狀變?yōu)闃?biāo)準(zhǔn)的拖動形狀,當(dāng)光標(biāo)移動到每一個小
正方形上面時,出現(xiàn)重置大小的形狀。
動作
點擊控件時,將獲取焦點的控件(源控件)傳遞給PickBox控件,這,也相當(dāng)于把源控件的位置和大小信息都傳遞給PickBox了。于是,PickBox給源控件產(chǎn)生8個小正方形,將激活事件,使源控件上的光標(biāo)變
成拖動形狀,對于光標(biāo)的移動事件進行捕獲,當(dāng)光標(biāo)移動到小正方形上面時,修改光標(biāo)形狀。對于重置大小的動作,先確定選定的小正方形的位置,然后確定松開鼠標(biāo)的位置,再激活松開鼠標(biāo)的事件,
將原控件變形。
對于拖動事件,要先確定鼠標(biāo)原來的位置,和拖動后松開鼠標(biāo)的位置,然后通過對整個源控件的平移操作
(.Net已經(jīng)提供相關(guān)的函數(shù)),實現(xiàn)拖動。
其它
在做重置大小的操作時,假使控件被縮小到很小時,不足以顯示小正方形了,這里,PickBox不再處理重
置動作了。這樣的處理雖然是防止了錯誤的發(fā)生,不過,是不是這樣處理,還應(yīng)當(dāng)斟酌斟酌一下。
一個十分專業(yè)的自定義Button控件
寫在前面:見過優(yōu)秀的自定義控件,但是沒見過如此優(yōu)秀的自定義控件,其專業(yè)的水平和良好的美工令人稱贊,除了Profession,沒什么詞語可以更好地形容了。自定義的Button,可以達到下面的效果,肯是不簡單,而程序員只設(shè)置幾個簡單的屬性,就可以了,甚至,Button的顏色過渡,也是控件自帶的功能。Button作為系統(tǒng)中最重要的控件之一,而.Net自帶的標(biāo)準(zhǔn)的Button太過粗糙和簡單,很不美觀,這是
好多系統(tǒng)都想改進的。有了下面的RibbonMenuButton就不是大問題了。
初評
名字之所以叫RibbonMenuButton,是由于這個控件的樣式與Office2023的Button比較相像,并且,此Button是可以放在Menu中使用的,請留意RibbonMenuButton右側(cè)的小三角形,是可以設(shè)置下拉菜單的,當(dāng)然,也可以不顯示。用戶一般設(shè)置的顏色有三組:基本顏色,鼠標(biāo)懸浮顏色和點擊顏色,而每組顏色,都是由兩個顏色組成的,如ColorBase和ColorBaseStroke,就是基本顏色,基本顏色過渡色。RibbonMenuButton最大的特點是顏色的漸變,這一特點,也使它身價提高,不再是普通的個人自定義控件,而是Profession級別的控件,當(dāng)然,也可以跟DevExpress的Button來比較了。與漸變的效果相像,用戶只需要設(shè)置兩個顏色,整個RibbonMenuButton就會表現(xiàn)出顏色擴散的效果,也就是中心區(qū)
顏色是你設(shè)置的顏色,而四周的顏色就擴散而成的效果。
效果圖如下:
原網(wǎng)址:
介紹此款控件的原網(wǎng)址是:
http://./KB/buttons/The_New_RibbonMenuButton.aspx
設(shè)計剖析
繼承Button,巧妙的顏色過度設(shè)計和提高下拉菜單功能
布局
與普通Button不同之處在于,RibbonMenuButton提供了下拉菜單的功能,正如圖片所示,下拉可以是Button的四周,與普通Button一樣,它也支持圖片的顯示。RibbonMenuButton還提供了四邊的弧度
的設(shè)置。動作與方法
介紹一個重要的屬性FadingSpeed,就是顏色擴散的速度,這個速度,與控件內(nèi)部的一個計時器有密切
關(guān)系,就是普通計時器的作用,不斷重畫了Button,從而出現(xiàn)漸變的效果的。通過查看void
timer1_Tick(objectsender,EventArgse)方法的代碼,相信你會再加明白控件是怎樣做到漸變的。而控件四周的弧度,你可以通過查看DrawArc(Rectanglere,GraphicsPathpa)方法來得到更多的信息。
此外,還有下拉菜單的小箭頭等等都是控件的特征。
其它
相信,一般系統(tǒng),需要使用的Button,有這樣的樣子,也就足夠了,大部分的程序員也不需要Button有什么特別的功能,需要的,就是華美的外衣罷了。不過,此款控件的確很好,要了解此控件的更多信息,
請訪問介紹控件的原網(wǎng)址。
一個新型的Tooltip控件BalloonHelp
寫在前面:之前介紹了《.Net(C#)自定義WinForm控件之BalloonWindow》提及到,BalloonWindow是可以擴展的,下面就展示一下擴展的成果,BalloonWindow其實是一個Form,雖然形式上像ToolTip,但明眼人,一看,也知道是一個Form,下面介紹的BalloonHelp是繼承自BalloonWindow的,也就是說,它,也是一個Form,不過,一般人,都覺得,這只是一個功能強大的ToolTip,有Form的特性和
ToolTip的靈活,使得BalloonHelp具有兩個的特點。
初評
粗略一看,是不是一個ToolTip???只不過,樣子長得是丑了點,不過,ToolTip加Form的功能都有了,有圖標(biāo),有關(guān)閉按鈕,有標(biāo)題與文字等等。當(dāng)然了,也與之前介紹的自定義控件《.Net(C#)自定義WinForm控件之MessageBalloon》有相像之處。
源網(wǎng)址
介紹此款用戶控件的源網(wǎng)址是:http://./KB/miscctrl/balloonnet.aspx
設(shè)計剖析
引入消息處理和繼承BalloonWindow并重寫OnPaint事件
布局
類似于ToolTip,有一個小三角形,三角形的頂點指向源控件/源位置,界面的四個角都呈橢圓形平滑過渡,
圖標(biāo)位置與標(biāo)題位置適中,關(guān)閉按鈕顯示在右上方,提醒內(nèi)容可分行,ToolTip自動變長
動作與方法
引入消息處理機機制,在這里,表現(xiàn)為Hooks.WindowsHook類型控件的引入,Hook可以理解為Hook
技術(shù)的簡化,而Hook技術(shù),根據(jù)資料可理解為這樣:
Hook是應(yīng)用程序在MicrosoftWindows消息處理過程中設(shè)置的用來監(jiān)控消息流并且處理系統(tǒng)中尚未到達目的窗口的某一類型消息過程的機制。假使Hook過程在應(yīng)用程序中實現(xiàn),若應(yīng)用程序不是當(dāng)前窗口時,該Hook就不起作用;假使Hook在DLL中實現(xiàn),程序在運行中動態(tài)調(diào)用它,它能實時對系統(tǒng)進行監(jiān)控。
根據(jù)需要,我們采用的是在DLL中實現(xiàn)Hook的方式。
簡化而言,可以看作是對事件,消息的處理。下面是源文件中Hooks.WindowsHook的一部分,從中,可以知道,這個自定義的WindowsHook所做的事,就是處理好線程和句柄,然后,控件源控件的事件。
另處,為了理解此控件的繪制過程,必需對下面這兩個方法有進一步的理解。
CalcClientSizeDraw(Graphicsg)
當(dāng)你了解這些后,你會對BalloonHelp自定義控件有了初步了認(rèn)識。
重寫默認(rèn)的CheckBox控件
寫在前面:自定義CheckBox,就是在原有的CheckBox控件的基礎(chǔ)上,加上漂亮的外衣,適當(dāng)做一些過渡的效果,而在這些效果里面加上樣式,自定義的CheckBox繼承自系統(tǒng)標(biāo)準(zhǔn)的CheckBox,就可以了。
原網(wǎng)址:
介紹此款控件的原網(wǎng)址是:http://./KB/buttons/skincontrol.aspx
設(shè)計剖析:繼承+披外衣
布局
完全覆蓋原有的CheckBox的外形,而使用圖片蓋在上面,不同的狀態(tài)使用不同的圖片,就算連打勾,也是圖
片的一部分,可以說,這是一種簡單的GUI編程,且對于簡單的控件是有用的.
動作與方法
SkinCheckBox繼承自CheckBox,而代碼也相對比較簡單.
如下圖所示
使用State來表示控件的狀態(tài),一般有普通,已選擇,有效無效,鼠標(biāo)懸停等,然后重寫MouseEnter,MouseDown,MouseLeave等操作,而在OnPaint寫的內(nèi)容才是重頭戲.
在OnPaint事件中,主要是獲取了CheckBox的框所在的位置,然后再使用不同的圖片來置換.
其它
這一種簡單的加皮膚模式,在應(yīng)付CheckBox,RadioBox等控件時,是很有效的,但大部分的控件是不適用的,如Button,當(dāng)背景不斷拉伸后,圖片變得不變觀了,這就是圖片編輯中研究的位圖和矢量的東西,矢量的
圖,適合于拉伸,而圖片的,不適應(yīng).
重寫默認(rèn)的RadioButton
寫在前面:自定義RadioButton,跟自定義CheckBox一樣,關(guān)于自定義CheckBox的介紹在下面的網(wǎng)址:http://./News/DotNetUserInterface/20230213071311398.html,而RadioButton與CheckBox基本上是一致的,同時,這兩個自定義控件都是由同一個程序員編寫的,寫此文的目的,就是為了介紹完整的自定義系列產(chǎn)品,因此,基本上,文字的描述都與自定義CheckBox是一樣的,下面,開始介紹RadioButton,是在原有的RadioButton控件的基礎(chǔ)上,加上漂亮的外衣,適
當(dāng)做一些過渡的效果,而在這些效果里面加上樣式,自定義的RadioButton繼承自系統(tǒng)標(biāo)準(zhǔn)的
RadioButton,就可以了。
原網(wǎng)址:
介紹此款控件的原網(wǎng)址是:http://./KB/buttons/skincontrol.aspx
設(shè)計剖析:繼承+披外衣
布局
完全覆蓋原有的RadioButton的外形,而使用圖片蓋在上面,不同的狀態(tài)使用不同的圖片,就算連打勾,也是圖片的一部分,可以說,這是一種簡單的GUI編程,且對于簡單的控件是有用的.控件提供了三套的樣式,如MacOsStyle,XpStyle,PlexStyle,實現(xiàn)上是使用三套的圖片,控件的所有狀態(tài)都放在一個圖片上,在加載
圖片時,調(diào)用一個公共的方法,把需要用到的狀態(tài)從圖片中截取出來.
動作與方法
SkinRadioButton繼承自RadioButton,而代碼也相對比較簡單.
提供不同樣式的選擇,如MacOsStyle,XpStyle,PlexStyle等等,可以根據(jù)不同的需要而客制化.
如下圖所示
使用State來表示控件的狀態(tài),一般有普通,已選擇,有效無效,鼠標(biāo)懸停等,然后重寫
MouseEnter,MouseDown,MouseLeave,MouseUp等操作,而在OnPaint寫的內(nèi)容才是重頭戲.在OnPaint事件中,主要是獲取了RadioButton的框所在的位置,然后再使用不同的圖片來置換,在此,最終一行代碼SkinDraw.DrawRect1(g,SkinImage.radioButton,r1,i)是調(diào)用另一個類的方法,把RadioButton,CheckBox和Button的繪制都寫在一個公共的方法上面了,而RadioButton與CheckBox圖形變化不是很大,使用Skin直接覆蓋的方法,很有效,而Button的變化還是很大的,所以,使用Skin直接
覆蓋不是很成功.
其它
這一種簡單的加皮膚模式,在應(yīng)付RadioButton,CheckBox等控件時,是很有效的,但大部分的控件是不適用的,如Button,當(dāng)背景不斷拉伸后,圖片變得不變觀了,這就是圖片編輯中研究的位圖和矢量的東西,矢量
的圖,適合于拉伸,而圖片的,不適應(yīng).
常用Design屬性
寫在前面:在開發(fā)自定義控件件時,有好些Design屬性是要使用的,如ToolboxItem,ToolboxBitmap,Category,Description等等,不知道這些屬性其實也可以將控件搞出來,不過,知道了,會令事件更加簡單,令控件更加專業(yè)和實用。有時,不知道用法,會令到項目的其他同事好煩,由于這個控件是你提供
的。下面對一些常用的Design屬性做一個簡單的生產(chǎn)介紹。
ToolboxItem
有沒有試過寫一個用戶控件后,想它不出現(xiàn)在工具箱中,當(dāng)然有,有時候是控件的Designer部分沒有寫好或沒寫,有時候是控件一拖出來就報錯,有時候是內(nèi)部使用的控件,不想別人一引用DLL就出現(xiàn)控件。
其它設(shè)置方法可以很簡單。[ToolboxItem(false)]
publicclassMyPanel:UserControl
這樣就可以了。“可惡〞的用戶控件就自動隱蔽了,不出現(xiàn)在工具箱中。不過,假使你不知道這樣的話,可
以會引來一大堆的煩事。
ToolboxBitmap
寫好一個用戶控件后,在工具箱中出來的是一個藍色的齒輪,這就不是很漂亮了,也不能夠直觀地表達自己的意圖。假使更不幸的你的控件的名稱好難認(rèn)的話,其它的開發(fā)者會很麻煩的。怎樣才能讓用戶控件在
工具箱中顯示不同的圖標(biāo)呢?
[ToolboxBitmap(typeof(System.Windows.Forms.Panel))]
publicclassMyPanel:UserControl
這樣就可以了,表示,你所做的用戶控件使用的圖標(biāo)是Panel的圖標(biāo)。
假使不想用系統(tǒng)的圖標(biāo),要使用自己的圖標(biāo),可以這樣
[ToolboxBitmap(typeof(MyPanel),\
publicclassMyPanel:UserControl
不過,一定要注意路徑,WindowsApplication1.Images.MyPanel.bmp表示,解決方案是WindowsApplication1,目錄是Images,文件名是MyPanel.bmp,同時,這個圖片必需是“嵌入的資
源〞(點擊文件,右鍵,屬性,有一個文件屬性,其中,在生成操作中,可以選擇\嵌入的資源\)
Category與Description
[Category(\陰影色\
publicSystem.Drawing.ColorShadowColor{get{…}set{…}}
這兩個是經(jīng)常都會寫在一起的屬性,Category表示類型,如屬性框中所顯示的外觀,布局等,當(dāng)然,你可以自己寫一個,叫“自定義屬性〞,而Description就是這個屬性的描述,用來說明屬性有什么用途。這兩個的設(shè)置相對都比較簡單,可以說,一看就知道,不過提一下,Appearance是特別的詞,在屬性面板
中,它就是外觀一欄。
DefaultValue
[DefaultValue(typeof(Color),\
publicSystem.Drawing.ColorShadowColor{get{…}set{…}}
用于設(shè)置默認(rèn)的值,對于string,bool,int,可以直接寫出來,如[DefaultValue(10)],這是可以的,不過,不是這三種類型的話,就比較麻煩,一定要先轉(zhuǎn)化為string才能設(shè)置成功。如上面的DarkGray,這是系統(tǒng)定義的顏色,這還是比較好處理的。不過,假使是一些自定義的顏色,如顏色是128,0,128,你應(yīng)
該將128轉(zhuǎn)為16進制,寫成0x800080,前綴0x是一定要加的。最終就這樣
[DefaultValue(typeof(Color),\
Browsable
表示,是否在屬性面板中顯示這個屬性
[Browsable(true)]
表示,將在屬性面板中顯示這個屬性。DesignerSerializationVisibility
表示,是否在*.Designer.cs文件中將設(shè)置的代碼寫出來,也就是是否要實現(xiàn)序列化[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
表示需要實現(xiàn)序列化。
DotNet(C#)自定義WinForm界面控件之Window消息
寫在前面:要自定義WinForm界面控件,WndProc方法的重寫生怕是必不可少了,它是對系統(tǒng)消息的捕獲和處理方法,自定義控件時,可以捕獲重畫,鼠標(biāo)移動等消息,然后重畫控件,從而改變控件的外觀,這樣就可以達到自定義的功能,特別是美化控件,就一定要捕獲系統(tǒng)消息,下面介紹一些重要的系統(tǒng)消息,這些消息基本上是繼承.Net基礎(chǔ)控件(如TextBox,Button之類)之后必不可少的需要捕獲的消息。如WM_PAINT,WM_NCPAINT等,你可以不知道嗎?假使你真的不知道,你可以說,你是個入門的GUI
編程者嗎?下面,只簡單地列舉消息和說明意思,但并不舉例子說明。
WM_PAINT=0x000F
其中0x000F是C#中表示int的一種寫法,可以定義為const
要求一個窗口重畫自己WM_NCPAINT=0x0085
當(dāng)某個窗口的框架必需被繪制時,程序發(fā)送此消息給窗口
WM_ACTIVATE=0x0006一個窗口被激活或失去激活狀態(tài)WM_KILLFOCUS=0x0008
失去焦點
WM_NCCALCSIZE=0x0083
當(dāng)某個窗口的客戶區(qū)域必需被核算時發(fā)送此消息
WM_NCACTIVATE=0x0086
此消息發(fā)送給某個窗口僅當(dāng)它的非客戶區(qū)需要被改變來顯示是激活還是非激活狀態(tài)
WM_SETTEXT=0x000C
應(yīng)用程序發(fā)送此消息來設(shè)置一個窗口的文本
WM_LBUTTONDOWN=0x0201
按下鼠標(biāo)左鍵
WM_LBUTTONUP=0x0202
釋放鼠標(biāo)左鍵
WM_LBUTTONDBLCLK=0x0203
雙擊鼠標(biāo)左鍵
WM_MOUSEMOVE=0x0200
移動鼠標(biāo)
WM_SYSCOMMAND=0x0112
當(dāng)用戶選擇窗口菜單的一條命令或當(dāng)用戶選擇最大化或最小化時那個窗口會收到此消息
WM_SIZE=5改變一個窗口的大小WM_SIZING=0x0214
當(dāng)用戶正在調(diào)整窗口大小時發(fā)送此消息給窗口;通過此消息應(yīng)用程序可以監(jiān)視窗口大小和位置也可以修改
他們
WM_ERASEBKGND=0x0014
當(dāng)窗口背景必需被擦除時(例在窗口改變大小時)
WM_SHOWWINDOW=0x18當(dāng)隱蔽或顯示窗口是發(fā)送此消息給這個窗口
WM_NCCREATE=0x0081
當(dāng)某個窗口第一次被創(chuàng)立時,此消息在WM_CREATE消息發(fā)送前發(fā)送
WM_WINDOWPOSCHANGING=0x0046
發(fā)送此消息給那個窗口的大小和位置將要被改變時,來調(diào)用setwindowpos函數(shù)或其它窗口管理函數(shù)
WM_WINDOWPOSCHANGED=0x0047
發(fā)送此消息給那個窗口的大小和位置已經(jīng)被改變時,來調(diào)用setwindowpos函數(shù)或其它窗口管理函數(shù)
自定義一個圖形控件ChartControl
寫在前面:好多的系統(tǒng)都要使用圖形圖表來表達數(shù)據(jù),這樣,比較直觀和大方,而在使用圖形圖表時,好多人會選擇使用免費的,如Microsoft的MSChart,這是默認(rèn)安裝在每臺機器上的,但是,假使需要客制化一部分內(nèi)容,如線圖顯示的線的粗度等等,MSChart就不行了,沒有源代碼嘛,這樣,就不是很合要求了,最好的方法,還是自定義一個Chart的控件,這樣的話,你就需要參考和學(xué)習(xí)現(xiàn)成的自定義軟件了,
假使你的只使用線圖的話,那,下面介紹的ChartControl就是你的選擇了。
初評:
此款自定義Chart控件只支持直線圖,不支持餅圖,直方圖等。它浮現(xiàn)的是一個比較良好的神態(tài)和外觀,但,算不是企業(yè)級的,可以自定義數(shù)據(jù)頂點顯示的形狀,如下圖顯示的是菱形,一個Chart控件,大致有如下的部分,ChartTitle控件的標(biāo)題,X軸的坐標(biāo)與刻度,Y軸的坐標(biāo)與刻度,圖例(如下圖的sample
series),曲線(就是各數(shù)據(jù)點連接起來的線),格(Grid,也就是控件中部的區(qū)域),數(shù)據(jù)點標(biāo)簽(Label,
就是數(shù)據(jù)點上的數(shù)值,如30,60,40,50)等等。
原網(wǎng)址:
介紹此款自定義Chart控件的原網(wǎng)址為:
http://./KB/miscctrl/ChartControl.aspx
你可以在那里獲取更多的信息
設(shè)計剖析
簡單地繼承了Control類,然后,有序地畫各個部件
布局
需要繪制的部件有多個,如Chart的Title,X軸Title(XaxisTitle),Y軸Title(YaxisTitle),圖例Legend,圖主格ChartGrid,圖中曲線ChartLines,X軸XAxis,Y軸YAxis,數(shù)據(jù)點的小圖標(biāo)ChartMark(如第一個數(shù)據(jù)點30的菱形圖標(biāo)),X軸上顯示的數(shù)據(jù)點的大小ChartProjection(如第一個數(shù)據(jù)點30的X軸上顯示的傾斜45度的1-06),X軸Y軸的刻度(AxisTick)等等。一個個畫完這些內(nèi)容之后,你會發(fā)現(xiàn),再也沒什么內(nèi)容了,只要做了項目的控件,精心計劃控件的設(shè)置,你也可以做這個自定義控件。
動作與方法
在OnPaint方法中,不斷調(diào)用了如下的方法,為Chart的每一個部件進行繪制操作,所繪制的內(nèi)容與其
名字是一樣的。
此外,還有如下方法,用于繪制Chart的主體部分。
事實上,這些方法,為好多程序員提供了線圖的參考,由于大部分的線圖,都必需有這些屬性,而這些屬性的顯示都是一步步進行的,是經(jīng)過精心的計劃,最終才做出控件的。從這里,可以看到了的專業(yè)精
神和認(rèn)真的態(tài)度,由于沒有這種態(tài)度,不可以做出如此優(yōu)秀的效果。
其它
暫時,此控件只支持一條曲線的繪制,功能需要擴展,但是,對于每個認(rèn)真分析過程序,細(xì)心研究程序的用戶來說,增加多條曲線不是什么問題。甚至粗暴的直接抄代碼增加曲線也不是什么問題,從側(cè)面說明白
的編譯能力強,代碼重用性高。但,說這些,并不是勉勵大家侵?jǐn)_的版權(quán)的。
重寫TabControl控件
寫在前面:.Net系統(tǒng)自帶的標(biāo)準(zhǔn)TabControl樣子比較簡結(jié),而且設(shè)置起來也不是很便利,下面介紹一款自定義TabControl的控件FlatTabControl,它的特點是設(shè)置起來比較簡單,樣子是Flat形式的,不是3D,而且有TabPage的圖標(biāo)功能,設(shè)置起來很很簡單,所以要改良修正的話,也是比較快的,可以通過
對自定義代碼的修修補補,實現(xiàn)更加強大的功能。
初評
FlatTabControl的小圖標(biāo)功能,是比較醒目的,第一眼就能發(fā)現(xiàn)與標(biāo)準(zhǔn)TabControl的不同。接著是
TabPage的Flat功能,它完全覆蓋了標(biāo)準(zhǔn)TabControl的3D效果。
原網(wǎng)址
介紹此款
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 炎黃職業(yè)技術(shù)學(xué)院《海洋化學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 天津科技大學(xué)《文化創(chuàng)意產(chǎn)品設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 內(nèi)蒙古呼和浩特市賽罕區(qū)市級名校2025年初三第四次調(diào)研診斷考試數(shù)學(xué)試題理試題含解析
- 吉林職業(yè)技術(shù)學(xué)院《土壤科學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 武漢工商學(xué)院《舞蹈與形體》2023-2024學(xué)年第二學(xué)期期末試卷
- 攀枝花學(xué)院《高速鐵路概論》2023-2024學(xué)年第二學(xué)期期末試卷
- 宜春幼兒師范高等??茖W(xué)校《植物保健與和諧植?!?023-2024學(xué)年第二學(xué)期期末試卷
- 二零二五版外籍工作人員聘用合同范例
- 二零二五版?zhèn)€人房產(chǎn)抵押合同書范文
- 范文房產(chǎn)抵押擔(dān)保合同模板二零二五年
- 2022年四川省阿壩州中考數(shù)學(xué)試卷
- 【年產(chǎn)20萬噸丙烯酸工藝設(shè)計13000字(論文)】
- 分布式光伏經(jīng)濟評價規(guī)范
- 軌道交通噪聲與振動控制技術(shù)研究
- 乾坤未定吾皆黑馬+高考沖刺百日誓師主題班會
- 安徽省合肥市2024屆高三第一次教學(xué)質(zhì)量檢查數(shù)學(xué)試卷及答案
- 2024年四川成都地鐵運營有限公司招聘筆試參考題庫含答案解析
- 廣東省地質(zhì)災(zāi)害危險性評估實施細(xì)則(2023年修訂版)
- 《非稅收入征收管理》課件
- 與小三分手的協(xié)議書
- 羊水過少護理查房
評論
0/150
提交評論