以下是窗工程的全部代码,只有一个窗体,在窗体加一个列表框就行. 
Option Explicit 
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _ 
                                                                        ByVal wMsg As Long, _ 
                                                                        ByVal wParam As Long, _ 
                                                                        lParam As Any) As Long 
Private Const LB_SETHORIZONTALEXTENT = &H194 
   
Private Sub setListWidth() 
    '如果列表框不够宽,则增加水平滚动条 
    Dim i As Integer 
    Dim List_MaxL As Integer 
     
    ' 获得选项内容的最大长度 
    For i = 0 To demo_lbox.ListCount - 1 
        '让list_maxl中保存最长的一条字串 
        If Len(demo_lbox.List(i)) > List_MaxL Then 
            List_MaxL = Len(demo_lbox.List(i)) + 2 
        End If 
    Next i 
     
    ' 判断是否内容显示不完全,如果是则添加水平滚动条 
    If Me.TextWidth("AA") * List_MaxL > demo_lbox.Width Then 
        SendMessage demo_lbox.hwnd, LB_SETHORIZONTALEXTENT, Me.TextWidth("AA") * List_MaxL, ByVal 0& 
    End If 
End Sub 
   Private Sub Form_Load() 
   Dim i As Integer 
   ' 为ListBox控件添加选项 
   For i = 0 To 100 
      demo_lbox.AddItem ("这是列表框中的一项,最后数字表示这是第几行数据:(第 " + CStr(i)) & "行)" 
      'demo_lbox.AddItem ("(第 " + CStr(i)) & "行)" 
   Next i 
    
   ' 设置窗体坐标尺度模式和字体大小 
   Me.ScaleMode = vbPixels 
   Me.FontSize = demo_lbox.FontSize 
   '设置列表框的水平滚动条 
   Call setListWidth 
End Sub 
----------------------------- 
我要问的是: 
这个api函数如何理解,当然它的功能就是为列表框加一个水平滚动条. 
可是有几个地方我不明白:  
第一:下面定义常数的作用是什么? 
Private Const LB_SETHORIZONTALEXTENT = &H194 第二:以下这一句,几个参数不明白 
SendMessage demo_lbox.hwnd, LB_SETHORIZONTALEXTENT, Me.TextWidth("AA") * List_MaxL, ByVal 0& &H194是消息的标识符,我最不明白的就是这个常数对应的是什么意思呀,还有,最后一个参数是什么意思? 

解决方案 »

  1.   

    LB_SETHORIZONTALEXTENT是列表框能接受的消息之一,其值和作用微软都规定好了。其实重点在于&H194,之所以定义常量,是我为了提高程序的可读性
    SendMessage demo_lbox.hwnd, LB_SETHORIZONTALEXTENT, Me.TextWidth("AA") * List_MaxL, ByVal 0&
    的意思是向demo_lbox发送一个LB_SETHORIZONTALEXTENT消息,其附带的第一个参数是滚动条的长度(准确来说是文本长度,滚动条必须适合这个最长文本,方便滚动),第二个参数对这个功能无效,使用0即可。
      

  2.   

    Private Const LB_SETHORIZONTALEXTENT = &H194 
    &H194 是 API 的约定,唯一标识一个消息,该消息通过 wParam 指明列表框需要显示内容的宽度(Pixel 单位),消息处理过程会根据当前列表框的宽度决定是否需要显示水平滚动条。SendMessage demo_lbox.hwnd, LB_SETHORIZONTALEXTENT, Me.TextWidth("AA") * List_MaxL, ByVal 0& 
    最后一个参数表示参数 lParam 为 C 类型的 NULL。