一网上下载的,加了一个状态栏后,状态栏无法正常工作了源码:http://yicol1.51.net/download/ListBox2.rar

解决方案 »

  1.   

    窗口过程改成这样就好了
    Public Function wndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        If Msg = WM_DRAWITEM Then
            Dim dis As DRAWITEMSTRUCT, s As String * 260
            'lParam传过来的是DRAWITEMSTRUCT的地址
            CopyMemory dis, ByVal lParam, Len(dis)
            
           If dis.CtlType = ODT_LISTBOX Then '如果是listbox
                '随便填个背景色,主要是清除下面的DrawFocusRect画出的框
                
                SendMessage dis.hwndItem, LB_GETTEXT, dis.itemID, ByVal s
                s = Left(s, lstrlen(s))
                SetBkMode dis.hdc, 1 '把画出的文字的背景设为透明
                  SetTextColor dis.hdc, dis.itemData
                If dis.itemState = ODS_FOCUS Then '如果是当前项目
                  FillRect dis.hdc, dis.rcItem, 1
                Else
                  FillRect dis.hdc, dis.rcItem, 0
                End If
                ''---lstrlen()可以返回一个中英文混合字符串的正确长度
                DrawText dis.hdc, s, lstrlen(s), dis.rcItem, &H4 '&H4 的其它值可以在API浏览器里查DT_??
                wndProc = 0
            Else
                 wndProc = CallWindowProc(lpOldProc, hwnd, Msg, wParam, lParam)
            End If
      '我们处理了的消息就返回0
         Exit Function
        End If
        '其它消息让程序处理
         wndProc = CallWindowProc(lpOldProc, hwnd, Msg, wParam, lParam)
    End Function
      

  2.   


    窗口过程改成这样就好了
    Public Function wndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        If Msg = WM_DRAWITEM Then
            Dim dis As DRAWITEMSTRUCT, s As String * 260
            'lParam传过来的是DRAWITEMSTRUCT的地址
            CopyMemory dis, ByVal lParam, Len(dis)
            
           If dis.CtlType = ODT_LISTBOX Then '如果是listbox
                '随便填个背景色,主要是清除下面的DrawFocusRect画出的框
                
                SendMessage dis.hwndItem, LB_GETTEXT, dis.itemID, ByVal s
                s = Left(s, lstrlen(s))
                SetBkMode dis.hdc, 1 '把画出的文字的背景设为透明
                  SetTextColor dis.hdc, dis.itemData
                If dis.itemState = ODS_FOCUS Then '如果是当前项目
                  FillRect dis.hdc, dis.rcItem, 1
                Else
                  FillRect dis.hdc, dis.rcItem, 0
                End If
                ''---lstrlen()可以返回一个中英文混合字符串的正确长度
                DrawText dis.hdc, s, lstrlen(s), dis.rcItem, &H4 '&H4 的其它值可以在API浏览器里查DT_??
                wndProc = 0
            Else
                 wndProc = CallWindowProc(lpOldProc, hwnd, Msg, wParam, lParam)
            End If
      '我们处理了的消息就返回0
         Exit Function
        End If
        '其它消息让程序处理
         wndProc = CallWindowProc(lpOldProc, hwnd, Msg, wParam, lParam)
    End Function
      

  3.   

    select case msg
    case .....
        ......
        ......
    case else
        wndProc = CallWindowProc(lpOldProc, hwnd, Msg, wParam, lParam)
    end select