我用文本框,按钮,ListView模拟Combo,用以实现对数据库操作时,可以实现多列的下拉列表,供用户选择,现在的问题是,要想很好的模拟Combo,就要实现Mouse在ListView上移动时,能不能实现不让TextBox失去焦点?
如果用MSHflexgrid替换ListView,能不能实现当MouseMove时,让表格的当前行选中?现在难点在于,MouseMove时有X,Y,但是我如何知道对应的MSHFlexgrid的行是哪行呢?
如果用MSHflexgrid替换ListView,能不能实现当MouseMove时,让表格的当前行选中?现在难点在于,MouseMove时有X,Y,但是我如何知道对应的MSHFlexgrid的行是哪行呢?
Option Explicit
Private Const LB_SETCURSEL = &H186
Private Const LB_GETCURSEL = &H188
Private Type POINTAPI
X As Long
Y As Long
End TypePrivate Declare Function ClientToScreen Lib "user32" _
(ByVal hwnd As Long, lpPoint As POINTAPI) As LongPrivate Declare Function LBItemFromPt Lib "COMCTL32.DLL" _
(ByVal hLB As Long, ByVal ptX As Long, ByVal ptY As Long, _
ByVal bAutoScroll As Long) As LongPrivate Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Long) As LongPublic Sub HighlightLBItem(ByVal LBHwnd As Long, _
ByVal X As Single, ByVal Y As Single)Dim ItemIndex As Long
Dim AtThisPoint As POINTAPI
AtThisPoint.X = X \ Screen.TwipsPerPixelX
AtThisPoint.Y = Y \ Screen.TwipsPerPixelY
Call ClientToScreen(LBHwnd, AtThisPoint)
ItemIndex = LBItemFromPt(LBHwnd, AtThisPoint.X, _
AtThisPoint.Y, False)
If ItemIndex <> SendMessage(LBHwnd, LB_GETCURSEL, 0, 0) Then
Call SendMessage(LBHwnd, LB_SETCURSEL, ItemIndex, 0)
End IfEnd Sub