建立自制标题栏的圆角矩形窗体

来源:互联网 发布:solidworks软件价格 编辑:程序博客网 时间:2024/04/29 03:10

这里说的是有关闭按钮等、可以用鼠标移动窗体的位置的圆角矩形窗体,我们先看下效果图:(点击这里下载源文件)

效果图

在介绍如何制作之前我们要先说说这个制作的核心方法:

    1. 制作圆角矩形窗体
    2. 自制标题栏

其中制作圆形矩形窗体用API,自制的标题栏只要自已用PS等做出图片后加入到窗体的Image或Picture上后再为其加上几个事件即可。这几个事件就是让窗体移动的关键。下面说说具体步骤:

建立圆角矩形窗体

这里要用到两个API,分别是CreateRoundRectRgn和SetWindowRgn,前者是建立一个圆角矩形,后者是将圆角矩形加到窗体上。他们的声明如下(用于窗体模块中):

Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long

Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

下面给出一个他们的用法示例:

Private Sub Form_Load()
Dim p, s As Long
p = CreateRoundRectRgn(0, 0, 393, 300, 10, 10)
s = SetWindowRgn(Form1.hWnd, p, True)
Form1.Refresh
End Sub

这样你就有一个圆角矩形窗体了。

自制标题栏

我们设计一个窗体,窗体的BorderStyle为0,界面如下:

将我们做好标题栏(除按钮)加入到Image1,将最小化图标加入到Image2,将关闭图标Image3中,下面用到Pictrue的原因是我们在窗体中一定要用到别的控件,那么我们就要用到Pictrue中,因为他可以作为父容器。这里可以将上面的说明建立圆角矩形时的Form_Load过程加入了。对于各个控件的位置这里真不好确定,我也是运行过也次才调过来的,因为图片用的单位和窗体的不同,最好把窗体的ScaleMode高为3。

这里界面做好了,为了能让我们做的标题栏成为真的标题栏,就要为我们的控件编写事件了。具体如下:

我们用到了Image1的三个事件:MouseMove、MouseDown、MouseUp。因为当按下鼠标且移动时才能让窗体移动,所以用到一个Boolean型的窗体变量IsMousePress来记录鼠标是否按下,当鼠标按下时IsMousePress为true,当鼠标松开时IsMousePress为false。同时也要为MouseMove加入事件,当IsMousePress为true(即鼠标按下)时MouseMove才能有效,才能让窗体移动。全部代码如下(如果在家且有VB6.0最好把源文件下载下来更明了):

Option Explicit

Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long

Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Dim IsMouseDown As Boolean   '记录鼠标是否按下
Dim PressX As Integer   '记录鼠标按下时X值
Dim PressY As Integer   '记录鼠标按下时Y值

Private Sub Form_Load()
        Dim p, s As Long
        p = CreateRoundRectRgn(0, 0, 393, 300, 10, 10)
        s = SetWindowRgn(Form1.hWnd, p, True)
        Form1.Refresh
End Sub

Private Sub image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        IsMouseDown = True
        PressX = X
        PressY = Y
End Sub

Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If IsMouseDown Then
                Form1.Left = Form1.Left + X - PressX
                Form1.Top = Form1.Top + Y - PressY
        End If
End Sub

Private Sub image1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
        IsMouseDown = False
End Sub

Private Sub Image2_Click()
        Form1.WindowState = vbMinimized
End Sub

Private Sub Image3_Click()
        End
End Sub

原创粉丝点击