很多软件都有程序启动界面,我在这就找到了2个比较特别的给大家看看:
这是VS2010旗舰版的启动界面,大家留意他的底部,是不规则的。
这是PS CS5的启动界面,整个界面呈现完全的不规则,很飘逸。
可是啊,我上来不是给大家看图片的,没错,教你如何用VB6.0做出各种各样奇形怪状的启动界面。
首先,我先介绍一下程序需要使用那些API函数,也不多:
1.
Public Declare Function CreatePolygonRgnLib "gdi32" (lpPointAs POINTAPI,ByVal nCountAs Long,ByVal nPolyFillModeAs Long)As Long
功能:创建一个由一系列点围成的区域。windows在需要时自动将最后点与第一点相连以封闭多边形
参数:
lpPoint | POINTAPI,nCount个POINTAPI结构中的第一个POINTAPI结构 | @H_301_81@
nCount | Long,多边形的点数 | @H_301_81@
nPolyFillMode | Long,描述多边形填充模式。可为ALTERNATE 或 WINDING常数。参考SetPolyFillMode函数对多边形填充模式的解释 | @H_301_81@
2.
Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1As Long,ByVal Y1As Long,ByVal X2As Long,ByVal Y2As Long)As Long
功能:创建一个由点X1,Y1和X2,Y2描述的矩形区域
参数:
X1,Y1 | Long,矩形左上角X,Y坐标 | @H_301_81@
X2,Y2 | Long,矩形右下角X,Y坐标 | @H_301_81@
3.
Public Declare Function CreateRoundRectRgnLib "gdi32" (ByVal X1As Long,ByVal Y2As Long,ByVal X3As Long,ByVal Y3As Long)As Long
功能:创建一个圆角矩形,该矩形由X1,Y1-X2,Y2确定,并由X3,Y3确定的椭圆描述圆角弧度
参数:
X1,Y1 | Long,矩形左上角的X,Y坐标 | @H_301_81@
X2,Y2 | Long,矩形右下角的X,Y坐标 | @H_301_81@
X3 | Long,圆角椭圆的宽。其范围从0(没有圆角)到矩形宽(全圆) | @H_301_81@
Y3 | Long,圆角椭圆的高。其范围从0(没有圆角)到矩形高(全圆) | @H_301_81@
4.
Public Declare Function FillRgnLib"gdi32" (ByVal hdcAs Long,ByVal hRgnAs Long,ByVal hBrushAs Long)As Long
功能:用指定刷子填充指定区域
参数:
hdc | Long,设备场景句柄 | @H_301_81@
hRgn | Long,以数据设备坐标填充的区域句柄 | @H_301_81@
hBrush | Long,要用的刷子的句柄 | @H_301_81@
5.
Public Declare Function DeleteObjectLib "gdi32" (ByVal hObjectAs Long) As Long
功能:用这个函数删除GDI对象,比如画笔、刷子、字体、位图、区域以及调色板等等。对象使用的所有系统资源都会被释放
参数:hObject Long,一个GDI对象的句柄
6.
Public Declare Function CreateEllipticRgnLib "gdi32" (ByVal X1As Long,ByVal Y2As Long)As Long
功能:创建一个椭圆,该椭圆与X1,Y1和X2,Y2坐标点确定的矩形内切
参数:
7.
Public Declare Function SetWindowRgnLib "user32" (ByVal hWndAs Long,ByVal bRedrawAs Boolean)As Long
功能:更改窗口的形状
参数:
hWnd | Long,将设置其区域的窗口 | @H_301_81@
hRgn | Long,将设置的区域的句柄,一旦设置了该区域,就不能使用或修改该区域句柄,也不要删除它 | @H_301_81@
bRedraw | Boolean,若为TRUE,则立即重画窗口 | @H_301_81@
8.
Public Declare Function CombineRgnLib "gdi32" (ByVal hDestRgnAs Long,ByVal hSrcRgn1As Long,ByVal hSrcRgn2As Long,ByVal nCombineModeAs Long)As Long
功能:将两个区域组合为一个新区域
参数:
hDestRgn | Long,包含组合结果的区域句柄 | @H_301_81@|
hSrcRgn1 | Long,源区域1 | @H_301_81@|
hSrcRgn2 | Long,源区域2 | @H_301_81@|
nCombineMode | Long,组合两区域的方法。可设为下述常数 | @H_301_81@|
RGN_AND | hDestRgn被设置为两个源区域相交的部分 |
@H_301_81@
|
RGN_COPY | hDestRgn被设置为hSrcRgn1的拷贝 | @H_301_81@|
RGN_DIFF | hDestRgn被设置为hSrcRgn1中与hSrcRgn2不相交的部分 | @H_301_81@|
RGN_OR | hDestRgn被设置为两个区域的和 | @H_301_81@|
RGN_XOR | hDestRgn被设置为除两个源区域之外的部分 | @H_301_81@
9.
Public Declare Function CreatePatternBrushLib "gdi32" (ByVal hBitmapAs Long) As Long
功能:用指定了刷子图案的一幅位图创建一个刷子
参数:hBitmap :Long,指向一幅位图的句柄。如指定了单色位图,文本和背景色就会在图案中使用
10.
Public Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
功能:用纯色创建一个刷子
参数:crColor :Long,数字的RGB彩色
【这里继续:】
好了,别的不多说,进入教程。
第一章:设计区域,修改窗体形状
第一步:首先,启动VB6.0,选择标准EXE工程,然后添加一个模块,将以下的声明粘贴到模块中,这些就是以后程序中要用到API函数,以后所有的修改都是使用这个模块。
VB代码开始:
Public Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI,ByVal nCount As Long,ByVal nPolyFillMode As Long) As Long
Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long,ByVal Y1 As Long,ByVal X2 As Long,ByVal Y2 As Long) As Long
Public Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long,ByVal Y2 As Long,ByVal X3 As Long,ByVal Y3 As Long) As Long
Public Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long,ByVal hRgn As Long,ByVal hBrush As Long) As Long
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Public Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long,ByVal Y2 As Long) As Long
Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long,ByVal bRedraw As Boolean) As Long
Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long,ByVal hSrcRgn1 As Long,ByVal hSrcRgn2 As Long,ByVal nCombineMode As Long) As Long
Public Declare Function CreatePatternBrush Lib "gdi32" (ByVal hBitmap As Long) As Long
Public Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Public Type POINTAPI
x As Long
y As Long
End Type
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Const RGN_AND = 1
'将两个区域相交的部分
Public Const RGN_COPY = 5
'创建hSrcRgn1的拷贝
Public Const RGN_DIFF = 4
'将两个区域不相交的部分
Public Const RGN_OR = 2
'将两个区域相加
Public Const RGN_XOR = 3
'除了两个区域之外
Public Const DT_SINGLELINE = &H20
'只画单行文本
Public Const DT_CENTER = &H1
'文本垂直居中
Public Const DT_VCENTER = &H4
'必须同时指定DT_SINGLE。指示文本对齐格式化矩形的中部
VB代码结束
第二步,将窗口拉大,拉成长明显大于宽的长方形。再将窗口的BackColor属性设置成&H0000FF00&(绿色)。最后双击窗体,打开代码窗口,在Load事件中加入如下代码:
VB代码开始:
Dim Rgn1,Rgn2,Rgn3 As Long,PicBrush As Long
'创建椭圆区域
Rgn1 = CreateEllipticRgn(5,5,Me.Width / 15 - 10,Me.Height / 15 - 10)
'创建第二个椭圆区域
Rgn2 = CreateEllipticRgn(10,60,Me.Width / 20,Me.Height / 20)
'创建第三个椭圆区域
Rgn3 = CreateEllipticRgn(80,80,Me.Width / 30,Me.Height / 30)
'取出第一椭圆区域与第二区域不相交的部分
a = CombineRgn(Rgn1,Rgn1,RGN_DIFF)
'再加上第三区域
B = CombineRgn(Rgn1,Rgn3,RGN_OR)
'将窗体设置成上面的组合区域
SetWindowRgn Me.hWnd,True
VB代码结束
上面的注释说的很清楚,外加最上面的函数介绍,我相信代码并不需要我多解释。一个区域,是依照窗体的相对坐标(必须是VB默认的窗体坐标)来创建的。因为窗体的左上角是(0,0),所以我们将区域退出一点,就将左上角设置为(5,5)。而CombineRgn函数则是将两个区域进行组合创造出不规则的区域。其实,必须纠正的一个概念是,一开始,区域是看不到的(透明的),也不存在于任何一个坐标系中。我上面那样说是为了大家好理解,只有在用了如SetWindowRgn这样的函数,将某一个区域用到某一个对象时,这个区域的坐标系才依附于对象的坐标系。
好了,运行一下,看到的结果如图所示:
这里的灰色其实背后的颜色,就是说灰色的部分其实是透明的,随背景而变,而绿色才是原来的窗体(因为窗体的BackColor属性设置成了绿色。
这个图案够独特吧,不过还少一点什么,就是字,那么没关系,用一些标签控件弄点字上去实在简单不过的了。我上面已经说了区域的运作方式,那么就请个自己算准那里是不透明的窗体,那里是透明的背景,然后在不透明的窗体部分上放控件来显示文字了。而如果你在透明的背景区域上放控件,那么放了也是白放,自己算好了。而且记住,标签控件的BackStyle属性一定要设置成0(透明)。下面是我自己设计的(在VB中,还没运行):
而那些黑色线的椭圆,是我用Shape控件做出来的,目的就是确定那里是透明的背景,那里是不透明的窗体,紧记要将Shape控件的Visible属性设成False,因为这些Shape控件仅作参考。也好了,运行一下:
同样,灰色的是背景,绿色的是窗体,一个自己的PhotoShop CS5的启动界面就出来了。做自己的软件,在标签上打上自己的软件名。OK,张扬我个性,龙飞凤舞去吧。
第二章:“填充区域成不同的颜色,和用图片填充背景”(在另一篇博文上)