关于ListView的一个用法!

baoxue10181018 2004-04-01 09:32:55
将ListView设置成标题显示格式,当鼠标移动到两列之间时,
用户可以通过鼠标改变每列的宽度,我希望用户不可以改变每列的固定宽度,请各位指点!
...全文
45 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyingZFX 2004-04-01
  • 打赏
  • 举报
回复
Option Explicit

Private Sub Command1_Click()
Call LockHead(ListView1.hwnd)
End Sub

Private Sub Command2_Click()
Call UnLockHead(ListView1.hwnd)
End Sub

Private Sub Form_Load()
Dim i As Long
ListView1.ColumnHeaders.Add , , "asdf", ListView1.Width / 3
ListView1.ColumnHeaders.Add , , "qwre", ListView1.Width / 3
ListView1.ColumnHeaders.Add , , "zxcv", ListView1.Width / 3
For i = 0 To 100
ListView1.ListItems.Add , , CStr(i)
Next i
End Sub


\\\\\\\\\\\\\\\\\\\\\\\\\\模块
\\\\\\\\\\\\\\\\\\\\\\\\\\Option Explicit

Public Type NMHDR
hwndFrom As Long
idFrom As Long
code As Long
End Type

Public 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 = &H4E

Public 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 - 26

Private lpPrevWndFunc As Long

Public 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 Function

Public 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


CALG 2004-04-01
  • 打赏
  • 举报
回复
干脆用MSHFLEXGRID.
啊维 2004-04-01
  • 打赏
  • 举报
回复
关注.............
qybao 2004-04-01
  • 打赏
  • 举报
回复
估计可以用SetWindowLong去修改ListView的style,具体你查下msdn看看

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧