資源描述:
《C#創(chuàng)建不規(guī)則窗體和控件》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、C#]:創(chuàng)建不規(guī)則窗體和控件1作者:王凱明??點(diǎn)擊:71??時(shí)間:2002-11-7????在以前版本的VisualBasic或VisualC++中,創(chuàng)建不規(guī)則窗體和控件是一件很復(fù)雜的事,不僅需要調(diào)用大量API函數(shù)而且工作量也不小。不過,現(xiàn)在在VisualC#下,情況就完全不同了。運(yùn)用WindowsForms你就可以很輕易地創(chuàng)建出一個(gè)不規(guī)則的窗體以及窗體上的控件。一個(gè)具有不規(guī)則窗體和控件的應(yīng)用程序肯定會(huì)更吸引廣大的用戶,微軟的WindowsMediaPlayer7就顯示出這一點(diǎn)。作為程序員,您一定想在
2、自己的程序中運(yùn)用這點(diǎn)技術(shù)吧。程序的窗體和控件都可以以非傳統(tǒng)的方式被創(chuàng)建。本文就向大家展示如何在應(yīng)用程序中創(chuàng)建不規(guī)則窗體,以及如何在窗體上創(chuàng)建各式各樣的自定義形狀的控件。注:創(chuàng)建不規(guī)則窗體和控件這個(gè)過程包含了大量的圖形編程工作,所以不同的計(jì)算機(jī)因內(nèi)存和顯卡的不同可能會(huì)導(dǎo)致最終的效果有所不同。因此,在發(fā)布你的應(yīng)用程序前,務(wù)必在各種不同類型的計(jì)算機(jī)上做好測(cè)試工作。實(shí)現(xiàn)方法首先,創(chuàng)建一個(gè)位圖文件作為程序的窗體。位圖可以是任意形狀的,但是位圖文件區(qū)域一定要足夠大,這樣才能包含窗體上的所有控件。然后,你可以通過設(shè)
3、置一些屬性使該圖成為程序的窗體。把程序中的標(biāo)題欄去掉,否則整個(gè)界面將顯得很不協(xié)調(diào)。當(dāng)然你去掉了標(biāo)題欄也就去掉了它的最大化、最小化、關(guān)閉、移動(dòng)窗體等功能。為了使程序仍然具有這些功能,我們需在程序中添加一些代碼,這樣用戶就仍然可以像以前一樣和程序進(jìn)行交互。因此,你需要完成如下工作:1.創(chuàng)建一個(gè)作為窗體的位圖文件。2.創(chuàng)建一個(gè)Windows應(yīng)用程序,用上述位圖文件作為程序的窗體同時(shí)去掉其標(biāo)題欄。3.添加原標(biāo)題欄具有的功能所需的代碼。具體步驟下面我就具體向大家介紹如何創(chuàng)建不規(guī)則窗體。創(chuàng)建一個(gè)具有不規(guī)則形狀的位
4、圖文件1.用任何畫圖程序就可以創(chuàng)建不規(guī)則形狀的位圖,你可以使用最容易也是最方便的畫圖程序。2.用一種顏色畫出一個(gè)不規(guī)則的區(qū)域作為程序的窗體,并用另一種顏色畫出該位圖的背景。(你要使該不規(guī)則區(qū)域足夠大。)3.保存位圖文件。下面就是一個(gè)例子:在VS.net中創(chuàng)建一個(gè)新的工程首先,設(shè)置窗體的背景從而建立窗體形狀。1.在窗體設(shè)計(jì)器中選中窗體使之獲得焦點(diǎn)。2.在屬性對(duì)話框中進(jìn)行如下設(shè)置:●將FormBorderStyle屬性設(shè)置為None。該屬性去掉了程序的標(biāo)題欄,同時(shí)也除去了標(biāo)題欄的功能,不過我在后面還會(huì)向大
5、家介紹如何添加代碼以恢復(fù)這些功能的。●將BackgroundImage屬性設(shè)置為你創(chuàng)建的位圖文件。你不必在工程中添加該文件,因?yàn)槟阋坏┲付嗽撐募?,它就?huì)自動(dòng)被添加到工程中?!駥ransparencyKey屬性設(shè)置為位圖文件的背景顏色值(在本例中是藍(lán)色)。該屬性使得位圖的背景即上圖中的藍(lán)色部分不可見,從而窗體就呈現(xiàn)出一個(gè)不規(guī)則的橢圓形。3.保存工程。按Ctrl+F5可以運(yùn)行此程序。(注:因?yàn)闆]有標(biāo)題欄,所以你可以通過Alt+F4來關(guān)閉程序)將FormBorderStyle屬性設(shè)置為None后,程序的
6、標(biāo)題欄就被去掉了。這樣,為了獲得原來標(biāo)題欄的功能,我們必須手動(dòng)添加代碼。下面我就向大家介紹如何添加代碼實(shí)現(xiàn)關(guān)閉功能以及移動(dòng)窗體的功能。實(shí)現(xiàn)窗體的關(guān)閉及移動(dòng)1.往窗體上拖放一個(gè)按鈕控件。2.在屬性對(duì)話框中,將該控件的Text屬性設(shè)置為“關(guān)閉”。3.雙擊按鈕添加一個(gè)Click事件處理函數(shù)。4.在代碼編輯器中添加如下代碼:privatevoidbutton1_Click(objectsender,System.EventArgse){??this.Close();}5.接下來就是實(shí)現(xiàn)窗體的移動(dòng)功能。添加以下
7、代碼來創(chuàng)建一個(gè)Point對(duì)象,該對(duì)象(作為一個(gè)變量)決定在什么情況下移動(dòng)窗體。privatePointmouse_offset;6.創(chuàng)建窗體的MouseDown事件的事件處理函數(shù)。為該事件添加代碼后,用戶就可以在任何位置移動(dòng)窗體了。代碼如下:privatevoidForm1_MouseDown(objectsender,System.Windows.Forms.MouseEventArgse){??????mouse_offset=newPoint(-e.X,-e.Y);}7.創(chuàng)建窗體的MouseMo
8、ve事件的事件處理函數(shù)。當(dāng)鼠標(biāo)左鍵被按下,同時(shí)鼠標(biāo)被移動(dòng)時(shí),窗體的Location屬性就被設(shè)置為新的位置了,這樣窗體就被用戶拖動(dòng)了。privatevoidForm1_MouseMove(objectsender,System.Windows.Forms.MouseEventArgse){??if(e.Button==MouseButtons.Left)??{??????PointmousePos=Control.MousePosition;??????m