如何实现窗口的分割?

guanjinke 2002-12-11 12:32:33
如何实现窗口的分割?而且分割条可以移动?
...全文
43 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
guanjinke 2002-12-11
  • 打赏
  • 举报
回复
我觉得不太好,还有没有别的办法?
litsnake1 2002-12-11
  • 打赏
  • 举报
回复
up
hengxin54 2002-12-11
  • 打赏
  • 举报
回复
Option Explicit

'variable to hold the width of the spltter bar
Private Const SPLT_WDTH As Integer = 3

'variable to hold the last-sized postion
Private currSplitPosX As Long

'variable to hold the horizontal and vertical offsets of the 2 controls
Dim CTRL_OFFSET As Integer

'variable to hold the Splitter bar colour
Dim SPLT_COLOUR As Long
Private Sub Form_Load()
'set the startup variables

CTRL_OFFSET = 5
SPLT_COLOUR = &H808080

'set the current splitter bar position to an arbitrary value that will always be outside
'the possibe range. This allows us to check for movement of the spltter bar in subsequent
'mousexxx subs.

currSplitPosX = &H7FFFFFFF

ListLeft.AddItem "列表项 1"
ListLeft.AddItem "列表项 2"
ListLeft.AddItem "列表项 3"
ListLeft.AddItem "列表项 4"
ListLeft.AddItem "列表项 5"

'note: VB3 users will need to substitute Chr$(13) & chr$(10) for the VB4 constant vbCrLf in the sentence below.

TextRight = "在一些流行的应用程序中,经常见到窗体上有二个相邻的列表框,可以用鼠标任意拉动中间分割条,改变列表框大小。"

End Sub


Private Sub Form_Resize()

Dim x1 As Integer
Dim x2 As Integer
Dim height1 As Integer
Dim width1 As Integer
Dim width2 As Integer

On Error Resume Next

'set the height of the controls

height1 = ScaleHeight - (CTRL_OFFSET * 2)
x1 = CTRL_OFFSET
width1 = ListLeft.Width

x2 = x1 + ListLeft.Width + SPLT_WDTH - 1
width2 = ScaleWidth - x2 - CTRL_OFFSET

'move the left list
ListLeft.Move x1% - 1, CTRL_OFFSET, width1, height1

'move the right list
TextRight.Move x2, CTRL_OFFSET, width2 + 1, height1

'move the splitter bar
Splitter.Move x1 + ListLeft.Width - 1, CTRL_OFFSET, SPLT_WDTH, height1

End Sub

Private Sub Splitter_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Button = vbLeftButton Then
'change the splitter colour
Splitter.BackColor = SPLT_COLOUR

'set the current position to x
currSplitPosX = CLng(X)
Else
'not the left button, so... if the current position <> default, cause a mouseup
If currSplitPosX <> &H7FFFFFFF Then Splitter_MouseUp Button, Shift, X, Y

'set the current position to the default value
currSplitPosX = &H7FFFFFFF
End If

End Sub


Private Sub Splitter_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)


'if the splitter has been moved...
If currSplitPosX& <> &H7FFFFFFF Then

'if the current position <> default, reposition the splitter and set this as the current value
If CLng(X) <> currSplitPosX Then
Splitter.Move Splitter.Left + X, CTRL_OFFSET, SPLT_WDTH, ScaleHeight - (CTRL_OFFSET * 2)
currSplitPosX = CLng(X)

End If

End If

End Sub


Private Sub Splitter_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

'if the splitter has been moved...
If currSplitPosX <> &H7FFFFFFF Then
'if the current postition <> the last position do a final move of the splitter
If CLng(X) <> currSplitPosX Then
Splitter.Move Splitter.Left + X, CTRL_OFFSET, SPLT_WDTH, ScaleHeight - (CTRL_OFFSET * 2)
End If

'call this the default position
currSplitPosX = &H7FFFFFFF

'restore the normal splitter colour
Splitter.BackColor = &H8000000F

'and check for valid sizings.
'Either enforce the default minimum & maximum widths for the left list, or, if within range, set the width

If Splitter.Left > 60 And Splitter.Left < (ScaleWidth - 60) Then

ListLeft.Width = Splitter.Left - ListLeft.Left 'the pane is within range


ElseIf Splitter.Left < 60 Then 'the pane is too small
ListLeft.Width = 60
Else
ListLeft.Width = ScaleWidth - 60 'the pane is too wide
End If
'reposition both lists, and the splitter bar
Form_Resize
End If

End Sub


7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧