computer 版 (精华区)
发信人: windoe (为中国电信做贡献), 信区: program
标 题: VB:如何设计一个可用鼠标改变大小的切分窗口(Splitte
发信站: 听涛站 (Fri Mar 10 19:09:20 2000), 转信
在Windows 95的资源管理器(Explorer)中,有一种功能是可以给我们用鼠标任意拉动左
右22个列表的大小,调整列表的整体外观的“切分条”。在很多时候,我们希望自己编
写的软件里面也具有这种功能,那么,我们怎么实现呢?这里以切分2个ListBox为例,
实现的步骤如下:
1) 在VB中新建一个标准EXE工程;
2) 画出一个瘦高形状的图片Picture1,把图片的MouseIcon改为左右箭头,用来做切分
条# 名为Splitter;
3) 画出2个ListBox控件,分别改名为lstPers和lstTel。
3) 画出2个ListBox控件,分别改名为lstPers和lstTel。
4) 在Form1中编写以下代码:
Option Explicit
'定义需要使用的变量
Private Const P_ECART = 3
Private x1 As Integer, x2 As Integer
Private y1 As Integer, y2 As Integer
Private width1 As Integer,width2 As Integer
Private height1 As Integer, height2 As Integer
Private glbfrmInSizeX As Long
'初始化窗体和变量
Private Sub Form_Load()
glbfrmInSizeX = &H7FFFFFFF
Form_Resize
End Sub
'当切分条Splitter移动的时候
Private Sub splitter_MouseMove(Button As Integer, Shift As Integer, x As SSi
ngle, y As Single)
If glbfrmInSizeX <> &H7FFFFFFF Then
If CLng(x) <> glbfrmInSizeX Then
Splitter.Move Splitter.Left + x, y1, P_ECART, ScaleHeight - Sbar.Heiight - 2
glbfrmInSizeX = CLng(x)
End If
End If
End Sub
'当鼠标松开切分条Splitter的时候
Private Sub splitter_MouseUp(Button As Integer, Shift As Integer, x As Sinng
le, y As Single)
If glbfrmInSizeX <> &H7FFFFFFF Then
If CLng(x) <> glbfrmInSizeX Then
Splitter.Move Splitter.Left + x, y1, P_ECART, ScaleHeight - Sbar.Heiight - 2
End If
glbfrmInSizeX = &H7FFFFFFF
Splitter.BackColor = &H8000000F
If Splitter.Left > 60 And Splitter.Left < (ScaleWidth - 60) Then
lstpers.Width = Splitter.Left - lstpers.Left
ElseIf Splitter.Left < 60 Then
lstpers.Width = 60
Else
lstpers.Width = ScaleWidth - 60
End If
Form_Resize
End If
End Sub
End Sub
'当鼠标按下切分条Splitter的时候
Private Sub splitter_MouseDown(Button As Integer, Shift As Integer, x As SSi
ngle, y As Single)
If Button = vbLeftButton Then
Splitter.BackColor = &H808080
glbfrmInSizeX = CLng(x)
Else
If glbfrmInSizeX <> &H7FFFFFFF Then
splitter_MouseUp Button, Shift, x, y
End If
glbfrmInSizeX = &H7FFFFFFF
End If
End Sub
'窗体的大小改变
Private Sub Form_Resize()
Const B_ECART = 1
On Error Resume Next
'赋值
y1 = B_ECART
height1 = ScaleHeight - Sbar.Height - B_ECART * 2
x1 = B_ECART
width1 = lstpers.Width
x2 = x1 + lstpers.Width + P_ECART - 1
width2 = ScaleWidth - x2 - B_ECART
'ListBox和Splitter适应位置
lstpers.Move x1 - 1, y1, width1, height1
lstTel.Move x2, y1, width2 + 1, height1
Splitter.Move x1 + lstpers.Width - 1, y1, P_ECART, height1
End Sub
--By Kammi's SuperPost General Version
--
夜中不能寐,起坐弹鸣琴。
薄帷鉴明月,清风吹我襟。
孤鸿号外野,翔鸟鸣北林。
徘徊将何见,忧思独伤心。
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:1.043毫秒