奇怪的问题  我给一个combobox发了一个消息使他的列表框拉下来,
PostMessage CbForWndFinded.hwnd, CB_SHOWDROPDOWN, True, 0
 结果拉下来后鼠标不见了,把鼠标移动到任务栏上的时候可以看见,但是一离开任务栏就被遮挡了 
到别的地方任意点一下 或者切换个窗口 鼠标就出来了 这时什么原因呢?搞不清楚 希望高手解答啊 我再仔细研究一下

解决方案 »

  1.   

    加一句
    Me.MousePointer = 0
      

  2.   

    加Me.MousePointer=0或Me.Combo1.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
      

  3.   

    用了Me.MousePointer=0或Me.Combo1.MousePointer=0,搞定了,谢谢两位大哥