【【【【vb 多边形窗体,追加分!!!】】】】

怎么制作这样一个窗体,速度啦,我追加分,谢谢了... 怎么制作这样一个窗体,速度啦,我追加分,谢谢了 展开
 我来答
网海1书生
科技发烧友

2011-09-11 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26226

向TA提问 私信TA
展开全部
有两种方法可实现:
1、剪裁窗体:用CreateRectRgn创建一个长方形区域,再用CreateEllipticRgn创建一个圆形区域,然后用CombineRgn合并两个区域,最后用SetWindowRgn把合并后的区域作为剪裁区作用到窗体上即可。这是正统的方法,不过稍微有点复杂,而且要创建不规则的窗体就比较吃力了。
2、颜色透明法:就是把窗体上指定的颜色所在窗体变为透明的,就像PhotoShop中的抠图一样,把不要的部分去掉,剩下的就是需要的形状了。所以你可以制作一张图片,把窗体所需形状的颜色设为白色(或其他想要的颜色),把需要裁去的部分设为某种纯色(比如纯红色、纯黄色、纯蓝色等),然后把此图片作为窗体的背景图片,再在窗体加入如下代码(这里用纯黄色作为剪裁色):
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal HWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal HWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal HWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

Private Const WS_EX_LAYERED = &H80000
Private Const GWL_EXSTYLE = (-20)
Private Const LWA_ALPHA = &H2
Private Const LWA_COLORKEY = &H1

Private Sub Form_Load()
Dim rtn As Long
rtn = GetWindowLong(Me.HWnd, GWL_EXSTYLE)
rtn = rtn Or WS_EX_LAYERED
SetWindowLong Me.HWnd, GWL_EXSTYLE, rtn
SetLayeredWindowAttributes Me.HWnd, &HFFFF&, 0, LWA_COLORKEY
End Sub
就可以了。
这是一种取巧的方法,相对比较简单,而且可以做出任意形状的复杂窗体,我推荐这种方法
zxcvbnm12pk
2011-09-11 · TA获得超过156个赞
知道小有建树答主
回答量:127
采纳率:0%
帮助的人:95.3万
展开全部
1.坐标单位是Twips还是数像?
2.那个圆的半径96却比巨型边长64短?怎么回事?
3.先加分...留个E-mail发程序给你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liu765023051
2011-09-11 · 超过15用户采纳过TA的回答
知道答主
回答量:55
采纳率:100%
帮助的人:41.5万
展开全部
Option Explicit

Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
'创建一个由一系列点围成的区域。windows在需要时自动将最后点与第一点相连以封闭多边形

Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Type POINTAPI
X As Long
Y As Long
End Type
Private MyRegion As Long

Private Sub Form_Load()
Dim point(9) As POINTAPI
point(0).X = 145
point(0).Y = 76
point(1).X = 131
point(1).Y = 117

point(2).X = 90
point(2).Y = 117
point(3).X = 121
point(3).Y = 142

point(4).X = 107
point(4).Y = 185
point(5).X = 145
point(5).Y = 159

point(6).X = 182
point(6).Y = 185
point(7).X = 168
point(7).Y = 142

point(8).X = 200
point(8).Y = 117
point(9).X = 159
point(9).Y = 117

MyRegion = CreatePolygonRgn(point(0), 10, 1)
Me.ScaleMode = 3
Me.Move ScaleX(110, vbPixels, vbTwips), ScaleX(96, vbPixels, vbTwips), ScaleX(230, vbPixels, vbTwips), ScaleX(210, vbPixels, vbTwips)
Call SetWindowRgn(Me.hWnd, MyRegion, True)

End Sub

Private Sub Timer1_Timer()
Form1.BackColor = RGB(255 * Rnd, 255 * Rnd, 255 * Rnd)
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式