请问ListView控件如何禁止用户Resize标题行?

解决方案 »

  1.   

    将标题设置成Flat型的,用户就无法改变列的宽度了。程序手里没有,晚上回家在给你。你也可以自己去一些将vb小技巧的网站查一下。
      

  2.   

    可我如何将标题设成Flat型的呢?找了个程序,它把标题设成Flat型的,可是仍然能够改变列宽啊。
      

  3.   

    1 子类化ListView窗口 
    2 处理WM_NOTIFY 
    3 屏蔽HDN_BEGINTRACKA,HDN_BEGINTRACKW,HDN_DIVIDERDBLCLICKA,HDN_DIVIDERDBLCLICKW     ................................
            Case WM_NOTIFY
                Dim x As NMHDR
                
                CopyMemory x, ByVal lParam, Len(x)
                
                If x.code = HDN_BEGINTRACKA Or x.code = HDN_BEGINTRACKW Or _
                    x.code = HDN_DIVIDERDBLCLICKA Or x.code = HDN_DIVIDERDBLCLICKW Then
                    WindowProc = 1
                    Exit Function
                End If
                
         ................................
      

  4.   

    bbe()兄,能否给个完整的代码?我对这块不太熟悉。
      

  5.   

    'ModuleOption ExplicitPublic Type NMHDR
        hwndFrom As Long
        idFrom As Long
        code As Long
    End TypePublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
    Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Public Const GWL_WNDPROC = (-4)
    Public Const WM_NOTIFY = &H4EPublic Const HDN_FIRST = -300
    Public Const HDN_DIVIDERDBLCLICKA = HDN_FIRST - 5
    Public Const HDN_DIVIDERDBLCLICKW = HDN_FIRST - 25
    Public Const HDN_BEGINTRACKA = HDN_FIRST - 6
    Public Const HDN_BEGINTRACKW = HDN_FIRST - 26Private lpPrevWndFunc  As LongPublic Function WindowProc(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 x As NMHDR
                
                    CopyMemory x, ByVal lParam, Len(x)
                
                    If x.code = HDN_BEGINTRACKA Or x.code = HDN_BEGINTRACKW Or _
                        x.code = HDN_DIVIDERDBLCLICKA Or _
                        x.code = HDN_DIVIDERDBLCLICKW Then
                        WindowProc = 1
                        Exit Function
                    End If
        End Select
        
        WindowProc = CallWindowProc(lpPrevWndFunc, hwnd, uMsg, wParam, lParam)
    End FunctionPublic Sub LockHead(ByVal hwnd As Long)
        lpPrevWndFunc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
    End Sub
    Public Sub UnLockHead(ByVal hwnd As Long)
        SetWindowLong hwnd, GWL_WNDPROC, lpPrevWndFunc
    End Sub
    'FormOption Explicit
    Private Sub Command1_Click()
        Call LockHead(ListView1.hwnd)
    End SubPrivate Sub Command2_Click()
        Call UnLockHead(ListView1.hwnd)
    End Sub