Option ExplicitPrivate Declare Function ShowScrollBar Lib "user32" (ByVal _ hwnd As Long, ByVal wBar As Long, ByVal bShow As Long) _ As Long Private Const SB_HORZ = 0 Private Const SB_VERT = 1Private Sub Command1_Click() ShowScrollBar List1.hwnd, SB_VERT, 0 End SubPrivate Sub Form_Load() Dim i As Long For i = 1 To 100 List1.AddItem "line " + CStr(i) Next End Sub事实上你应该拦截控件重绘消息,进行子类处理
去除横向滚动条:
SendMessage List1.hwnd, LB_SETHORIZONTALEXTENT, 0, ByVal 0&
但现在问题主要还是出在纵向滚动条上。
因ListBox默认的状态是没有横向的,总有纵向滚动条。
现因特殊需要,能否在不使用其它控件的情况下,直接对ListBox发送不显示滚动条的指令?
我想可能有API能获得其最大、最小值、及步长,应该也有控制其滚动条显示的指令?
Public Const WM_VSCROLL = &H115
Public Const WM_HSCROLL = &H114
麻烦各位,若用API,请给出API完整申明(我只有VB5,里面的API残缺不全)
若牵涉到如LB_SETVERTICALEXTENT之类的常数,请给出具体数值好吗?
在此多谢了!
说实话,我只是VB爱好者(菜鸟级),只会用用几个基本控件,
我也没有什么好的工具,MSDN(太大了,暂时装不下)
为了能让爱机跑的顺(不好意思说配置了),只能装Win98(史前文明),
还为了免安装程序(其实是太懒),所以一直坚持用VB5+基本控件编程。
VB5里的API浏览器,简直就是一个玩具,啥有用的都没有
为了查API常数值,只能从VC中(本人一点都不会VC)抠了一个Winuser.h
大部分的都有了,但LB_SETVERTICALEXTENT 还是找不到,
望各位举手之劳,直接给出数值,帮一下小弟,在此先谢过
好象没有这条消息,至少在98下没有
hwnd As Long, ByVal wBar As Long, ByVal bShow As Long) _
As Long
Private Const SB_HORZ = 0
Private Const SB_VERT = 1Private Sub Command1_Click()
ShowScrollBar List1.hwnd, SB_VERT, 0
End SubPrivate Sub Form_Load()
Dim i As Long
For i = 1 To 100
List1.AddItem "line " + CStr(i)
Next
End Sub事实上你应该拦截控件重绘消息,进行子类处理
但在实际使用过程中发现一个问题,虽然可以直接设置滚动条不见,
但是一旦选定项目超出当前可视范围,滚动条又会出现。我想能否不通过拦截消息的方法,(VB的架构并不适合拦截系统消息,
这样很容易导致系统崩溃,并且也不容易调试),让ListBox的滚动条一直消失?
而且,不能把它Enable设置为False,因为一定要用户参与交互式操作,
与原来的ListBox比起来,仅仅少了纵向滚动条(主要的目的是减少边框的宽度,所以无法采用遮挡的办法),至于滚动功能,由程序直接实现,如快捷键等等。