#t#本人很喜欢VB.NET,在工作中也很喜欢总结关于VB.NET特殊形状窗体的经验教训,下面就这个问题来详细说说吧。我们的目的是实现VB.NET特殊形状窗体,VB6中实现(借助API函数)做一个古怪的窗口必须要用的也是此程序中最重要的一个函数就是SetWindowRgn它的功能就是对指定的窗口进行重画,把这个窗口你选择的部分留下其余的部分抹掉。
10年积累的成都做网站、网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站策划后付款的网站建设流程,更有曲麻莱免费网站建设让你可以放心的选择与我们合作。
VB.NET特殊形状窗体参数:
◆hWnd:你所要重画的窗口的句柄,比如你想重画form1则应该让此参数为form1.hWnd
◆hRgn:你要保留的区域的句柄,这个句柄是关键,你需要通过别的渠道来获得在这里的区域是由Combinergn合成的新区域
◆bRedram:是否要马上重画,一般设为true
◆函数CombineRgn将两个区域组合为一个新区域
◆函数Createrectrgn为创建一个由点X1,Y1和X2,Y2描述的矩形区域
◆函数CreateEllipticRgn为创建一个X1,Y1和X2,Y2的椭圆区域用DeleteObject这个函数可删除GDI对象,比如画笔、刷子、字体、位图、区域以及调色板等等。对象使用的所有系统资源都会被释放。
以下是VB6的代码:
- PrivateDeclareFunction CreateEllipticRgn Lib "gdi32" (ByVal X1 AsLong,
ByVal Y1 AsLong, ByVal X2 AsLong, ByVal Y2 AsLong) AsLong- PrivateDeclareFunction CreateRectRgn Lib "gdi32" (ByVal X1 AsLong,
ByVal Y1 AsLong, ByVal X2 AsLong, ByVal Y2 AsLong) AsLong- PrivateDeclareFunction CombineRgn Lib "gdi32" (ByVal hDestRgn AsLong,
ByVal hSrcRgn1 AsLong, ByVal hSrcRgn2 AsLong, ByVal nCombineMode AsLong) AsLong- PrivateDeclareFunction SetWindowRgn Lib "user32" (ByVal hWnd AsLong,
ByVal hRgn AsLong, ByVal bRedraw AsBoolean) AsLong- PrivateDeclareFunction DeleteObject Lib "gdi32" (ByVal hObject AsLong) AsLong
- PrivateConst RGN_DIFF = 4
- PrivateSub Form_Load()
- Dim rgn AsLong
- Dim rgnRect AsLong
- Dim rgnDest AsLong
- rgn = CreateEllipticRgn(0, 0, Me.Width / Screen.TwipsPerPixelX, Me.Height / Screen.TwipsPerPixelY)
- rgnRect = CreateRectRgn((Me.Width / Screen.TwipsPerPixelX - 20) / 2,
(Me.Height / Screen.TwipsPerPixelY - 20) / 2, (Me.Width / Screen.TwipsPerPixelX + 20) / 2,
(Me.Height / Screen.TwipsPerPixelY + 20) / 2)- rgnDest = CreateRectRgn(0, 0, 1, 1)
- CombineRgn rgnDest, rgn, rgnRect, RGN_DIFF
- SetWindowRgn Me.hWnd, rgnDest, True
- Call DeleteObject(rgnRect)
- Call DeleteObject(rgnDest)
- EndSub
- PrivateSub Command1_Click()
- End
- EndSub
在VB.NET中,我们可以使用.NET 框架类库System.Drawing.Drawing2D的GraphicsPath 类(应用程序使用路径来绘制形状的轮廓、填充形状内部和创建剪辑区域),来绘制图形,然后通过VB.NET特殊形状窗体的Me.Region来设置窗口的可见区域。
以下是VB.NET的代码:
- '声明一个布尔型变量,判断窗体是否正常区域
- Dim IsNormalRegion AsBoolean = True
- PrivateSub Button2_Click(ByVal sender As System.Object,
_ByVal e As System.EventArgs) Handles Button2.Click- If (IsNormalRegion) Then
- '构造一个GraphicsPath对象实例
- Dim Graphics AsNew System.Drawing.Drawing2D.GraphicsPath()
- Dim intHeight AsInteger = Me.Size.Height
- Dim intWidth AsInteger = Me.Size.Width
- '定义内矩形的左上角坐标
- Dim RectTop AsInteger = 100
- '在窗体上绘制一个大椭圆,左上角的坐标取为(0,0)
- Graphics.AddEllipse(0, 0, intWidth, intHeight)
- '再绘制一个小矩形
- Dim AddRect AsNew Rectangle(RectTop, RectTop,
intHeight - (RectTop * 2), intHeight - (RectTop * 2))- Graphics.AddRectangle(AddRect)
- '设置窗口的可见区域
- Me.Region = New Region(Graphics)
- Else
- Me.Region = Nothing
- EndIf
- IsNormalRegion = Not IsNormalRegion
- EndSub
文章题目:两个实例了解VB.NET特殊形状窗体
URL标题:http://www.mswzjz.cn/qtweb/news24/497174.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能