如何固定listview中列的宽度??
ListView1.View = lvwReport

解决方案 »

  1.   

    Dim FF As ListItem
        ListView1.ColumnHeaders.Clear
        ListView1.ListItems.Clear
        ListView1.ColumnHeaders.Add , "名称", "名称", 1400
        ListView1.ColumnHeaders.Add , "大小", "大小", 600
        ListView1.ColumnHeaders.Add , "属性", "属性", 1200
        ListView1.ColumnHeaders.Add , "日期", "日期", 1200
        Set FF = ListView1.ListItems.Add(, , "File1.txt")
        FF.SubItems(1) = "600 KB"
        FF.SubItems(2) = "只度"
        FF.SubItems(3) = "2005-02-23"
        '改变列宽度
        ListView1.ColumnHeaders.Item("大小").Width = 1400
    看看 大小 的宽度是不是比原来大了
      

  2.   

    处理ListView的WM_SETCURSOR,WM_LBUTTONDBLCLK,WM_NCHITTEST消息,不调用缺省的处理过程。Private Sub ownWndProc(Msg As Long, wParam As Long, lParam As Long)  As Long    Select Case Msg
                
            Case WM_SETCURSOR,WM_LBUTTONDBLCLK,WM_NCHITTEST
                If Not AllowResizeColumns(lvResults) Then Exit Sub
        
        End Select
        
        ownWndProc= CallWindowProc(Msg, wParam, lParam)
        
    End Sub
      

  3.   

    Private Sub ownWndProc(Msg As Long, wParam As Long, lParam As Long)  As Long    Select Case Msg
                
            Case WM_SETCURSOR,WM_LBUTTONDBLCLK,WM_NCHITTEST
                If Not AllowResizeColumns(lvResults) Then Exit Sub
        
        End Select
        
        ownWndProc= CallWindowProc(Msg, wParam, lParam)
        
    End Sub
      

  4.   

    既然使用listview,请看看这个控件:http://www.mndsoft.com/blog/default.asp
      

  5.   

    ---frmMain代码-----
    Private Sub Form_Load()
       Dim li As ListItem
       Dim lCount As Long
      
       With ListView1.ListItems
            For lCount = 1 To 100
                Set li = .Add(, , lCount)
                li.SubItems(1) = lCount
                li.SubItems(2) = lCount
            Next
       End With
       
       glLVDefWindowProc = SetWindowLong(ListView1.hwnd, GWL_WNDPROC, AddressOf LVWindowProc)
        
    End SubPrivate Sub Form_Unload(Cancel As Integer)
       If glLVDefWindowProc Then
            '结束子类处理
            SetWindowLong ListView1.hwnd, GWL_WNDPROC, glLVDefWindowProc
            glLVDefWindowProc = 0
       End IfEnd Sub
    -----basMain代码--------------------
    Option Explicit
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Declare Function SetClassLong Lib "user32" Alias "SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Public Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Public Declare Function DefWindowProc Lib "user32.dll" Alias "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Public Const GWL_WNDPROC = (-4)Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal dwLength As Long)Public Type NMHDR
       hwndFrom As Long        ' Window handle of control sending message
       idFrom As Long   ' Identifier of control sending message
       code As Long      ' Specifies the notification code
    End TypePublic Type NMHEADER
        hdr As NMHDR
        iItem As Long
        iButton As Long
        pitem As Long
    End TypePublic Const WM_NOTIFY& = &H4EPublic Const HDN_FIRST = -300&
    Public Const HDN_LAST = -399&Public Const HDN_ITEMCHANGINGA As Long = HDN_FIRST - 0
    Public Const HDN_ITEMCHANGINGW As Long = HDN_FIRST - 20
    Public Const HDN_ITEMCHANGEDA As Long = HDN_FIRST - 1
    Public Const HDN_ITEMCHANGEDW As Long = HDN_FIRST - 21
    Public Const HDN_ITEMCLICKA As Long = HDN_FIRST - 2
    Public Const HDN_ITEMCLICKW As Long = HDN_FIRST - 22
    Public Const HDN_ITEMDBLCLICKA As Long = HDN_FIRST - 3
    Public Const HDN_ITEMDBLCLICKW As Long = HDN_FIRST - 23
    Public Const HDN_DIVIDERDBLCLICKA As Long = HDN_FIRST - 5
    Public Const HDN_DIVIDERDBLCLICKW As Long = HDN_FIRST - 25
    Public Const HDN_BEGINTRACKA As Long = HDN_FIRST - 6
    Public Const HDN_BEGINTRACKW As Long = HDN_FIRST - 26
    Public Const HDN_ENDTRACKA As Long = HDN_FIRST - 7
    Public Const HDN_ENDTRACKW As Long = HDN_FIRST - 27
    Public Const HDN_TRACKA As Long = HDN_FIRST - 8
    Public Const HDN_TRACKW As Long = HDN_FIRST - 28
    Public Const HDN_GETDISPINFOA As Long = HDN_FIRST - 9
    Public Const HDN_GETDISPINFOW As Long = HDN_FIRST - 29
    Public Const HDN_BEGINDRAG As Long = HDN_FIRST - 10
    Public Const HDN_ENDDRAG As Long = HDN_FIRST - 11
    Public Const HDN_FILTERCHANGE As Long = HDN_FIRST - 12
    Public Const HDN_FILTERBTNCLICK As Long = HDN_FIRST - 13Public glLVDefWindowProc As LongPublic Function LVWindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Select Case uMsg
        Case WM_NOTIFY
            Dim tHD As NMHDR
            CopyMemory tHD, ByVal lParam, Len(tHD)
            Select Case tHD.code
            Case HDN_BEGINTRACKA, HDN_DIVIDERDBLCLICKA, HDN_BEGINDRAG, HDN_TRACKA
                Debug.Print "1"
                LVWindowProc = 1
                Exit Function
            End Select
        End Select
        LVWindowProc = CallWindowProc(glLVDefWindowProc, hwnd, uMsg, wParam, lParam)
    End Function
      

  6.   

    呵呵,原来是这样的目的,我没有试过,因为我常使用自己开发的控件,
    里面可以固定,也可以调整,界面灵活,毕竟是自己画的,呵呵。不过用回调函数信息拦截的方法因该可以,毕竟Windows可以说是一个信
    息的系统,所有的事件都是用信息拦截响应出来的,只是具体的信息参数
    问题罢了。
      

  7.   

    对于这种问题
    其实没必要用子类
    TreeView用的是Header控制
    改变Header控制的窗口风格就行了(去掉HDS_BUTTONS)dim hWnd as long
    dim lstyle as longhWnd = SendMessage(ListView1.hWnd, LVM_GETHEADER, 0, byval 0&)lstyle = GetWindowLong(hWnd, GWL_STYLE)
    lstyle = lstyle and not HDS_BUTTONS
    call SetWindowLong(hWnd, GWL_STYLE, lstyle)
      

  8.   

    Sorry!
    看错了既然不想改变列框
    那么干脆不要Header算了dim hWnd as long
    dim lstyle as longhWnd = ListView1.hWndlstyle = GetWindowLong(hWnd, GWL_STYLE)
    lstyle = lstyle or LVS_NOCOLUMNHEADER
    call SetWindowLong(hWnd, GWL_STYLE, lstyle)