Const CB_GETITEMHEIGHT = &H154 Const CB_SETITEMHEIGHT = &H153 Const CB_SHOWDROPDOWN = &H14F 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 Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As LongPrivate Sub Form_Load() Dim i As Long For i = 1 To 50 Combo1.AddItem Format(i, "00000") Next i Combo1.ListIndex = 0
Dim lngCmbLineHeiht As Long Dim lngCountLine As Long Me.ScaleMode = vbPixels With Combo1 lngCmbLineHeiht = SendMessage(.hwnd, CB_GETITEMHEIGHT, 0, ByVal 0) '设定下拉共有几行 lngCountLine = 25 '行 MoveWindow .hwnd, .Left, .Top, .Width, lngCmbLineHeiht * (lngCountLine + 2), 1 End With End Sub
谢谢楼上的指导,我有了思路,现在我找到一个简单的方法,比如在窗体中, 先声明movewindow函数,然后在窗体的load事件中用一句代码就能实现这个功能: Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long '调用API函数设置组合框下位列表长度 MoveWindow cbogongyi.hwnd, cbogongyi.Left / 15, cbogongyi.Top / 15, cbogongyi.Width / 15, 200, 1 为什么要除以15呢,因为VB窗体默认是缇,可是api函数是以像素为单位的. 所以长度就要转成像素.一缇=15像素
Const CB_SETITEMHEIGHT = &H153
Const CB_SHOWDROPDOWN = &H14F
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 Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As LongPrivate Sub Form_Load()
Dim i As Long
For i = 1 To 50
Combo1.AddItem Format(i, "00000")
Next i
Combo1.ListIndex = 0
Dim lngCmbLineHeiht As Long
Dim lngCountLine As Long
Me.ScaleMode = vbPixels
With Combo1
lngCmbLineHeiht = SendMessage(.hwnd, CB_GETITEMHEIGHT, 0, ByVal 0)
'设定下拉共有几行
lngCountLine = 25 '行
MoveWindow .hwnd, .Left, .Top, .Width, lngCmbLineHeiht * (lngCountLine + 2), 1
End With
End Sub
先声明movewindow函数,然后在窗体的load事件中用一句代码就能实现这个功能: Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long '调用API函数设置组合框下位列表长度
MoveWindow cbogongyi.hwnd, cbogongyi.Left / 15, cbogongyi.Top / 15, cbogongyi.Width / 15, 200, 1 为什么要除以15呢,因为VB窗体默认是缇,可是api函数是以像素为单位的.
所以长度就要转成像素.一缇=15像素