'添加模块 Public Const SM_CXHSCROLL = 21 Public Const GWL_STYLE = (-16) Public Const WS_HSCROLL = &H100000 Public Const WS_VSCROLL = &H200000 Public Const SB_BOTH = 3 Public Const SB_HORZ = 0 Public Const SB_VERT = 1 '以下以SB_开头的是用户的滚动请求 Public Const SB_LINEDOWN = 1 Public Const SB_LINELEFT = 0 Public Const SB_LINERIGHT = 1 Public Const SB_LINEUP = 0 Public Const SB_PAGERIGHT = 3 Public Const SB_PAGELEFT = 2 Public Const SB_PAGEDOWN = 3 Public Const SB_PAGEUP = 2 Public Const SB_ENDSCROLL = 8 Public Const SB_THUMBPOSITION = 4 Public Const SB_THUMBTRACK = 5 Public Const GWL_WNDPROC = (-4) Public Const WM_HSCROLL = &H114 Public Const WM_VSCROLL = &H115 Public Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long Declare Function ShowScrollBar Lib "user32" (ByVal hWnd As Long, ByVal wBar As Long, ByVal bShow As Long) As Long Declare Function SetScrollPos Lib "user32" (ByVal hWnd As Long, ByVal nBar As Long, ByVal nPos As Long, ByVal bRedraw As Long) As Long Declare Function SetScrollRange Lib "user32" (ByVal hWnd As Long, ByVal nBar As Long, ByVal nMinPos As Long, ByVal nMaxPos As Long, ByVal bRedraw As Long) As Long Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public preWndProc As Long Public xMin As Integer, xMax As Integer Public yMin As Integer, yMax As Integer Public xPos As Integer, yPos As Integer Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long On Error Resume Next Dim xInc As Integer, yInc As Integer Select Case uMsg Case WM_VSCROLL '垂直滚动条消息 Select Case LoWord(wParam) Case SB_LINEUP, SB_LINEDOWN If LoWord(wParam) Then yInc = 1 Else yInc = -1 End If Case SB_PAGEUP, SB_PAGEDOWN If LoWord(wParam) = SB_PAGEUP Then yInc = -10 Else yInc = 10 End If Case SB_THUMBTRACK yInc = HiWord(wParam) - yPos End Select yPos = yPos + yInc If yPos < yMin Then yPos = yMin If yPos > yMax Then yPos = yMax SetScrollPos hWnd, SB_VERT, yPos, True Form1.Label1 = yPos Case WM_HSCROLL '垂直水平条消息 Select Case LoWord(wParam) Case SB_LINELEFT, SB_LINERIGHT If LoWord(wParam) Then xInc = 1 Else xInc = -1 End If Case SB_PAGELEFT, SB_PAGERIGHT If LoWord(wParam) = SB_PAGELEFT Then xInc = -10 Else xInc = 10 End If Case SB_THUMBTRACK xInc = HiWord(wParam) - xPos End Select xPos = xPos + xInc If xPos < xMin Then xPos = xMin If xPos > xMax Then xPos = xMax SetScrollPos hWnd, SB_HORZ, xPos, True Form1.Label2 = xPos End Select WindowProc = CallWindowProc(preWndProc, hWnd, uMsg, wParam, lParam) End Function Public Sub SubClass(frm As Form) preWndProc = SetWindowLong(frm.hWnd, GWL_WNDPROC, AddressOf WindowProc) End Sub Public Sub UnSubClass(frm As Form) Call SetWindowLong(frm.hWnd, GWL_WNDPROC, preWndProc) End Sub 'The function below is much useful in API development. Private Function LoWord(num As Long) As Integer LoWord = num Mod &H10000 End Function Private Function HiWord(num As Long) As Integer HiWord = (num And &HFFFF0000) / &H10000 End Function 先在窗口上放两个Lable,两个Botton. '1.窗口风格的设置 '在窗口声明部分加入 Dim HVisible as Boolean,VVisible as Boolean Private Sub Form_Load() Dim OldStyle As Long Dim hsWidth As Integer '保存旧风格 OldStyle = SetWindowLong(hWnd, GWL_STYLE, 0) '设置新风格 Call SetWindowLong(hWnd, GWL_STYLE, OldStyle Or WS_VSCROLL Or WS_HSCROLL) Command1.Caption = "隐藏垂直滚动条" Command2.Caption = "隐藏水平滚动条" Label1 = "垂直滚动条的值" Label2 = "水平滚动条的值" '得到水平滚动条的宽度 hsWidth = GetSystemMetrics(SM_CXVHSCROLL) '改变窗口宽度与高度 Width = Width + hsWidth Height = Height + hsHeight VVisible = True HVisible = True '怎么样,滚动条显示出来了没有?没有?那么是我眼花了?@_@ '2.滚动范围的设置 yMin = 0: yMax = 100 xMin = 0: xMax = 100 SetScrollRange hWnd, SB_HORZ, xMin, xMax, True SetScrollRange hWnd, SB_VERT, yMin, yMax, True '建立子类窗口 SubClass Me End Sub'End Of Form_Load
真是多谢啦,滚动条是出来啦,但还没解决我的问题。 设计时我在VB FORM 里画了十个文本框,运行时FORM 较小,结果下面的文本框就显示不出来,我希望滚动条滚动后就可以显示下面的文本框。
BAD FORM 不明白。
我这样用:SetWindowLong(Me, 0, WS_BORDER) 不行。
多谢啦。
Public Const SM_CXHSCROLL = 21
Public Const GWL_STYLE = (-16)
Public Const WS_HSCROLL = &H100000
Public Const WS_VSCROLL = &H200000
Public Const SB_BOTH = 3
Public Const SB_HORZ = 0
Public Const SB_VERT = 1
'以下以SB_开头的是用户的滚动请求
Public Const SB_LINEDOWN = 1
Public Const SB_LINELEFT = 0
Public Const SB_LINERIGHT = 1
Public Const SB_LINEUP = 0
Public Const SB_PAGERIGHT = 3
Public Const SB_PAGELEFT = 2
Public Const SB_PAGEDOWN = 3
Public Const SB_PAGEUP = 2
Public Const SB_ENDSCROLL = 8
Public Const SB_THUMBPOSITION = 4
Public Const SB_THUMBTRACK = 5
Public Const GWL_WNDPROC = (-4)
Public Const WM_HSCROLL = &H114
Public Const WM_VSCROLL = &H115
Public Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Declare Function ShowScrollBar Lib "user32" (ByVal hWnd As Long, ByVal wBar As Long, ByVal bShow As Long) As Long
Declare Function SetScrollPos Lib "user32" (ByVal hWnd As Long, ByVal nBar As Long, ByVal nPos As Long, ByVal bRedraw As Long) As Long
Declare Function SetScrollRange Lib "user32" (ByVal hWnd As Long, ByVal nBar As Long, ByVal nMinPos As Long, ByVal nMaxPos As Long, ByVal bRedraw As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public preWndProc As Long
Public xMin As Integer, xMax As Integer
Public yMin As Integer, yMax As Integer
Public xPos As Integer, yPos As Integer
Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
On Error Resume Next
Dim xInc As Integer, yInc As Integer
Select Case uMsg
Case WM_VSCROLL '垂直滚动条消息
Select Case LoWord(wParam)
Case SB_LINEUP, SB_LINEDOWN
If LoWord(wParam) Then
yInc = 1
Else
yInc = -1
End If
Case SB_PAGEUP, SB_PAGEDOWN
If LoWord(wParam) = SB_PAGEUP Then
yInc = -10
Else
yInc = 10
End If
Case SB_THUMBTRACK
yInc = HiWord(wParam) - yPos
End Select
yPos = yPos + yInc
If yPos < yMin Then yPos = yMin
If yPos > yMax Then yPos = yMax
SetScrollPos hWnd, SB_VERT, yPos, True
Form1.Label1 = yPos
Case WM_HSCROLL '垂直水平条消息
Select Case LoWord(wParam)
Case SB_LINELEFT, SB_LINERIGHT
If LoWord(wParam) Then
xInc = 1
Else
xInc = -1
End If
Case SB_PAGELEFT, SB_PAGERIGHT
If LoWord(wParam) = SB_PAGELEFT Then
xInc = -10
Else
xInc = 10
End If
Case SB_THUMBTRACK
xInc = HiWord(wParam) - xPos
End Select
xPos = xPos + xInc
If xPos < xMin Then xPos = xMin
If xPos > xMax Then xPos = xMax
SetScrollPos hWnd, SB_HORZ, xPos, True
Form1.Label2 = xPos
End Select
WindowProc = CallWindowProc(preWndProc, hWnd, uMsg, wParam, lParam)
End Function
Public Sub SubClass(frm As Form)
preWndProc = SetWindowLong(frm.hWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnSubClass(frm As Form)
Call SetWindowLong(frm.hWnd, GWL_WNDPROC, preWndProc)
End Sub
'The function below is much useful in API development.
Private Function LoWord(num As Long) As Integer
LoWord = num Mod &H10000
End Function
Private Function HiWord(num As Long) As Integer
HiWord = (num And &HFFFF0000) / &H10000
End Function
先在窗口上放两个Lable,两个Botton.
'1.窗口风格的设置
'在窗口声明部分加入
Dim HVisible as Boolean,VVisible as Boolean
Private Sub Form_Load()
Dim OldStyle As Long
Dim hsWidth As Integer
'保存旧风格
OldStyle = SetWindowLong(hWnd, GWL_STYLE, 0)
'设置新风格
Call SetWindowLong(hWnd, GWL_STYLE, OldStyle Or WS_VSCROLL Or WS_HSCROLL)
Command1.Caption = "隐藏垂直滚动条"
Command2.Caption = "隐藏水平滚动条"
Label1 = "垂直滚动条的值"
Label2 = "水平滚动条的值"
'得到水平滚动条的宽度
hsWidth = GetSystemMetrics(SM_CXVHSCROLL)
'改变窗口宽度与高度
Width = Width + hsWidth
Height = Height + hsHeight
VVisible = True
HVisible = True
'怎么样,滚动条显示出来了没有?没有?那么是我眼花了?@_@
'2.滚动范围的设置
yMin = 0: yMax = 100
xMin = 0: xMax = 100
SetScrollRange hWnd, SB_HORZ, xMin, xMax, True
SetScrollRange hWnd, SB_VERT, yMin, yMax, True
'建立子类窗口
SubClass Me
End Sub'End Of Form_Load
设计时我在VB FORM 里画了十个文本框,运行时FORM 较小,结果下面的文本框就显示不出来,我希望滚动条滚动后就可以显示下面的文本框。