奇怪的问题 我给一个combobox发了一个消息使他的列表框拉下来,
PostMessage CbForWndFinded.hwnd, CB_SHOWDROPDOWN, True, 0
结果拉下来后鼠标不见了,把鼠标移动到任务栏上的时候可以看见,但是一离开任务栏就被遮挡了
到别的地方任意点一下 或者切换个窗口 鼠标就出来了 这时什么原因呢?搞不清楚 希望高手解答啊 我再仔细研究一下
PostMessage CbForWndFinded.hwnd, CB_SHOWDROPDOWN, True, 0
结果拉下来后鼠标不见了,把鼠标移动到任务栏上的时候可以看见,但是一离开任务栏就被遮挡了
到别的地方任意点一下 或者切换个窗口 鼠标就出来了 这时什么原因呢?搞不清楚 希望高手解答啊 我再仔细研究一下
Me.MousePointer = 0
建议最好使用模拟鼠标单击下拉列表框的按钮来显示下拉列表,下面是我回答别人时写的一段代码,你可以比较一下效果:
' ---------------------------------------------------------------------
' 程序功能:自动查找下拉框的匹配项
' 并高亮显示
' 作 者:lyserver
' ---------------------------------------------------------------------
Option ExplicitPrivate Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down
Private Const MOUSEEVENTF_LEFTUP = &H4 ' left button up
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
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 CB_SHOWDROPDOWN = &H14FDim m_pt As POINTAPIPrivate Sub Combo1_KeyUp(KeyCode As Integer, Shift As Integer)
Dim i As Long
Dim strTemp As String
Dim old_pt As POINTAPI strTemp = Trim(Combo1.Text)
'忽略控制键
If Len(strTemp) = 0 Or KeyCode < 30 Or Shift > 0 Then Exit Sub
'由于允许输入的字符串位于目标字符串的任意位置,
'故不能使用SendMessage(Combo1.hWnd, CB_FINDSTRING, -1, ByVal strTemp)进行自动查找
Combo1.ListIndex = -1
For i = 0 To Combo1.ListCount - 1
If InStr(Combo1.List(i), strTemp) > 0 Then
'隐藏原来显示的下拉列表
SendMessage Combo1.hwnd, CB_SHOWDROPDOWN, 0&, ByVal 0&
'高亮显示当前的列表项
Combo1.ListIndex = i
GetCursorPos old_pt
SetCursorPos m_pt.x, m_pt.y
Call mouse_event(MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
SetCursorPos old_pt.x, old_pt.y
Exit Sub
End If
Next
End SubPrivate Sub Form_Load()
Combo1.AddItem "001 |宁波旗舰有限公司"
Combo1.AddItem "002 |温州外贸局"
Combo1.AddItem "003 |浙江移动"
Combo1.AddItem "004 |浙江矿业"
Combo1.Text = ""
Combo1.ListIndex = -1
Me.ScaleMode = vbPixels
m_pt.x = Combo1.Width - 5
m_pt.y = Combo1.Height - 5
ClientToScreen Combo1.hwnd, m_pt
End Sub