分享
 
 
 

VB.Net创建不规则窗体

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

一般说来,应用程序的窗体都是规则的,即是矩形窗体。有时候为了某种特殊的用途,我们希望改变应用程序窗体的形状,比如做个个性十足的mp3播放器,小时钟等等,这就需要 "定制"我们的应用程序。另外,特殊形状的窗体有时候也能吸引用户的注意力,使得他们格外注意你的程序。

在VB6里面,我们一般通过以下代码来创建不规则窗体。

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创建一个圆形的区域,然后设置Form的区域为用户自定义的Region,这样我们就可以得到下面一个圆形的窗体

为了更美观一点,我们可以设Form的BorderStyle为None,然后自己画一个TitileBar,就可以做成比较活泼的应用程序。

VB.Net里面如何实现以上效果:

VB.NET是一中跨平台的语言,更好的利用了面向对象机制。它的面向对象能力扩展了语言本身的通路:一切都是对象。这意味着比在以前的VB版本里,你获得了更多的内在功能,你将很少被迫使用 Windows API。因此在VB.Net里面我们也只好放弃VB6里面利用API的观念,用VB.Net强大的对象机制来阐述以上话题。

在VB.Net里面,Form有一个Reigin属性,我们通过创建自定义的Reigin,然后指定Form的Reigin,就可以得到不规则的窗体。而且VB.Net里面的Reigin对象功能强大,远超过了之前VB的限制,因此我们可以作出很多漂亮的界面。

Regin对象

System.Drawing的一个对象,指示由矩形和由路径构成的图形形状的内部。因为区域的坐标是在全局坐标中指定的,所以可对它进行缩放。然而,在绘制表面上,它的内部取决于表示它的像素的大小和形状。应用程序可以使用若干区域来堆砌绘图操作的输出。窗口管理器则使用区域来定义窗口的绘制区域。这些区域被称为剪辑区域。应用程序还可以在命中检测的操作中使用区域,例如检查一个点或矩形是否与某个区域相交。应用程序可通过使用 Brush 对象来填充一个区域。

GraphicsPath表示一系列相互连接的直线和曲线,应用程序使用路径来绘制形状的轮廓、填充形状内部和创建剪辑区域。图形引擎在全局坐标空间中维护路径内的几何形状的坐标。路径可由任意数目的图形(子路径)组成。每一图形都是由一系列相互连接的直线和曲线或几何形状基元构成的。图形的起始点是相互连接的一系列直线和曲线中的第一点。终结点是该序列中的最后一点。几何形状基元的起始点和终结点都是由基元规范定义的。

下面我们看两个具体的实例

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

运行将将得到如下形状的窗体,记住按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

以上只是两个简单的例子,通过利用Region和GraphicsPath对象,你将得到更多有趣的效果。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有