VB窗体美化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学习窗体美化不错的知识
====================================================================================
相信大家看过许多形状怪异的窗口吧?可是在VB里,系统提供的只是一个矩形的窗体。如何在VB里实现这种异形窗体呢?
其实原理很简单。首先,在内存中构建一个想要的图形,再通过API函数将窗体设置为此形状,最后将图片放上去就可以了。关键在于如何构建这个想要的图形。让我们看看下面这个图:
。
这张图片中既有白色,也有其他彩色,而我们想要的颜色正是除白色以外的其它颜色。我们可以这样想:在内存中创建一幅一样大小的空的图像,然后只把我们需要的颜色(即非白色)输入内存。这样,就可以创建出我们想要的图形了。
以上是原理,接下来介绍几个API函数。
GetPixel:获取指定对象的某个点的颜色。
定义为:Public Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
其中hdc为图形对象的句柄,x、y为坐标。
SelectObject:向内存中的指定地点输入图形。
定义为:Public Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
其中hdc为内存中图形对象的句柄,hObject为欲输入的图像。
CreateCompatibleDC:在内存中创建一个与指定对象一样的场景(可以理解为图像)。
定义为:Public Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
其中hdc为指定对象的句柄。
DeleteObject:删除GDI对象(在这里用来删除用完的内存中的图形)。记住,用完后释放资源是非常重要的!
定义为:Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
其中hObject为欲删除的对象。
CreateRectRgn:在内存中创建一个矩形,返回值为矩形的句柄。
定义为:Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
其中X1、Y1为矩形左上角的点坐标,X2、Y2为矩形右下角的点坐标。
CombineRgn:将两个图形结合为一个图形。
定义为:Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
其中hDestRgn为合成后的图形句柄,hSrcRgn1、hSrcRgn2为两个欲合成的图形,nCombineMode 为合成模式(包括交集部分、并集部分、并集以外部分、不相交部分,我们需要的是并集部分)
SetWindowRgn:使指定窗口形状成为指定形状。
定义为:Public Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
其中hwnd为指定窗口的句柄,hRgn为指定图形句柄,bRedraw为选择是否立即重画窗口。
SetWindowPos:为窗口指定一个新位置和状态。
定义为:Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
其中hwnd为目标窗口的句柄,hWndInsertAfter设置窗口的新位置,x、y设置了窗体的坐标,cx、cy设置了窗体的新大小,wFlags设置了窗口的状态。
还有一个需要的常数:RGN_OR,是CombineRgn函数的模式之中的并集模式,定义为:Public Const RGN_OR = 2
为了方便,我将这些代码制作成了一个函数。以下为代码+注释:
Public Sub CreateImageForm(Form As Object, Imagebox As Object, strFile As String, BGColor As Long)
'Form为目标窗体,Imagebox是放图片用的,strFile是源图片路径,BGColor是不需要的颜色
Dim T As Integer '图形横坐标
Dim R As Integer '图形纵坐标
DoEvents '防止死机
Imagebox.AutoSize = True '使图片框自动调整大小,大小为图片大小
Imagebox.BorderStyle = 0 '使图片框无边框,防止边框占用图形位置
Imagebox.Picture = LoadPicture(strFile) '将图片读入图片框。图片框是用来更好的控制窗体大小
Form.Width = Imagebox.Width
Form.Height = Imagebox.Height '这两行将窗体大小调整为图片框大小
Imagebox.Visible = False '图片框不是让用户看的