VB窗体美化

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 '图片框不是让用户看的

相关文档
最新文档