国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

VB.Net創(chuàng)建不規(guī)則窗體 Montaque(原作)

2024-07-10 13:08:02
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
 vb.net創(chuàng)建不規(guī)則窗體    montaque(原作)  

一般說(shuō)來(lái),應(yīng)用程序的窗體都是規(guī)則的,即是矩形窗體。有時(shí)候?yàn)榱四撤N特殊的用途,我們希望改變應(yīng)用程序窗體的形狀,比如做個(gè)個(gè)性十足的mp3播放器,小時(shí)鐘等等,這就需要 "定制"我們的應(yīng)用程序。另外,特殊形狀的窗體有時(shí)候也能吸引用戶的注意力,使得他們格外注意你的程序。

在vb6里面,我們一般通過(guò)以下代碼來(lái)創(chuàng)建不規(guī)則窗體。
private declare function setwindowrgn lib "user32" (byval hwnd as long, _ byval hrgn as long, byval bredraw as boolean) as long
private declare function createellipticrgn lib "gdi32" (byval x1 as long, _ byval y1 as long, byval x2 as long, byval y2 as long) as long
private declare function deleteobject lib "gdi32" (byval hobject as long) as long

private sub form_activate()
dim hndrgn as long
hndrgn = createellipticrgn(0, 0, 175, 175)
call setwindowrgn(me.hwnd, hndrgn, true)
call deleteobject(hndrgn)
end sub
首先用win32 api createellipticrgn創(chuàng)建一個(gè)圓形的區(qū)域,然后設(shè)置form的區(qū)域?yàn)橛脩糇远x的region,這樣我們就可以得到下面一個(gè)圓形的窗體

為了更美觀一點(diǎn),我們可以設(shè)form的borderstyle為none,然后自己畫(huà)一個(gè)titilebar,就可以做成比較活潑的應(yīng)用程序。

vb.net里面如何實(shí)現(xiàn)以上效果:
vb.net是一中跨平臺(tái)的語(yǔ)言,更好的利用了面向?qū)ο髾C(jī)制。它的面向?qū)ο竽芰U(kuò)展了語(yǔ)言本身的通路:一切都是對(duì)象。這意味著比在以前的vb版本里,你獲得了更多的內(nèi)在功能,你將很少被迫使用 windows api。因此在vb.net里面我們也只好放棄vb6里面利用api的觀念,用vb.net強(qiáng)大的對(duì)象機(jī)制來(lái)闡述以上話題。
在vb.net里面,form有一個(gè)reigin屬性,我們通過(guò)創(chuàng)建自定義的reigin,然后指定form的reigin,就可以得到不規(guī)則的窗體。而且vb.net里面的reigin對(duì)象功能強(qiáng)大,遠(yuǎn)超過(guò)了之前vb的限制,因此我們可以作出很多漂亮的界面。

regin對(duì)象
system.drawing的一個(gè)對(duì)象,指示由矩形和由路徑構(gòu)成的圖形形狀的內(nèi)部。因?yàn)閰^(qū)域的坐標(biāo)是在全局坐標(biāo)中指定的,所以可對(duì)它進(jìn)行縮放。然而,在繪制表面上,它的內(nèi)部取決于表示它的像素的大小和形狀。應(yīng)用程序可以使用若干區(qū)域來(lái)堆砌繪圖操作的輸出。窗口管理器則使用區(qū)域來(lái)定義窗口的繪制區(qū)域。這些區(qū)域被稱為剪輯區(qū)域。應(yīng)用程序還可以在命中檢測(cè)的操作中使用區(qū)域,例如檢查一個(gè)點(diǎn)或矩形是否與某個(gè)區(qū)域相交。應(yīng)用程序可通過(guò)使用 brush 對(duì)象來(lái)填充一個(gè)區(qū)域。
graphicspath表示一系列相互連接的直線和曲線,應(yīng)用程序使用路徑來(lái)繪制形狀的輪廓、填充形狀內(nèi)部和創(chuàng)建剪輯區(qū)域。圖形引擎在全局坐標(biāo)空間中維護(hù)路徑內(nèi)的幾何形狀的坐標(biāo)。路徑可由任意數(shù)目的圖形(子路徑)組成。每一圖形都是由一系列相互連接的直線和曲線或幾何形狀基元構(gòu)成的。圖形的起始點(diǎn)是相互連接的一系列直線和曲線中的第一點(diǎn)。終結(jié)點(diǎn)是該序列中的最后一點(diǎn)。幾何形狀基元的起始點(diǎn)和終結(jié)點(diǎn)都是由基元規(guī)范定義的。
下面我們看兩個(gè)具體的實(shí)例
1.文字格式的窗體

在form的load事件加入以下代碼:
dim text_path as graphicspath
dim text_region as region
me.backcolor = color.red
me.width = 600
' create the text path.
text_path = new graphicspath( drawing.drawing2d.fillmode.alternate)
text_path.addstring("csdn", new fontfamily("times new roman"), fontstyle.bold, 200,new point(10, 10),
stringformat.genericdefault)
' create a region from the path.
text_region = new region(text_path)
' constrain the form to the region.
me.region = text_region

運(yùn)行將將得到如下形狀的窗體,記住按shift+f5 中止程序。

2.橢圓形狀的窗體:
同樣加入以下代碼,得到如下窗體

me.width = 300
me.height = 220
me.backcolor = color.royalblue
dim m_path as graphicspath
m_path = new graphicspath(fillmode.winding)
m_path.addellipse(1, 1, 200, 200)
dim m_region as new region(m_path)
me.region = m_region

以上只是兩個(gè)簡(jiǎn)單的例子,通過(guò)利用region和graphicspath對(duì)象,你將得到更多有趣的效果。



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 桐城市| 阿合奇县| 栖霞市| 鹤岗市| 扶绥县| 桃园县| 依兰县| 股票| 南皮县| 邻水| 太仓市| 安宁市| 西乌珠穆沁旗| 田东县| 体育| 栾城县| 鸡东县| 密山市| 龙岩市| 淮北市| 大宁县| 太仆寺旗| 陆川县| 贵定县| 新蔡县| 海阳市| 邮箱| 蓝田县| 长春市| 巴青县| 明光市| 湖南省| 新民市| 泗水县| 西贡区| 措勤县| 张掖市| 内江市| 乐山市| 大余县| 松溪县|