So ich habs geschafft =)
Ich hab nun mit WS_CLIPCHILDREN den Header im Vordergrund gesetzt. Somit ist das Problem behoben.
Das Listview Control verhält sich nun wie die im Windows Explorer.
Nun das ganze mal als Funktion...
Module:
Option Explicit
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" (ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" ( _
ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Private Const LVM_FIRST As Long = &H1000
Private Const LVM_SETEXTENDEDLISTVIEWSTYLE As Long = LVM_FIRST + &H36
Private Const LVM_GETEXTENDEDLISTVIEWSTYLE As Long = LVM_FIRST + &H37
Private Const LVS_EX_DOUBLEBUFFER As Long = &H10000
Private Const LVS_EX_GRIDLINES As Long = &H1
Private Const LVS_EX_FULLROWSELECT As Long = &H20
Private Const LVS_EX_HEADERDRAGDROP As Long = &H10
Private Const LVS_EX_INFOTIP As Long = &H400
Private Const GWL_STYLE = (-16)
Private Const WS_CLIPCHILDREN As Long = &H2000000
Public Function SetLWStyle(hWnd As Long, _
Optional Doublebuffer As Boolean = False, _
Optional HeaderOnTop As Boolean = False, _
Optional FullRowSelect As Boolean = False, _
Optional InfoTip As Boolean = False, _
Optional HeaderDragDrop As Boolean = False, _
Optional GridLines As Boolean = False)
Dim lvStyle As Long
Dim lRetVal As Long
Dim lStyle As Long
lvStyle = SendMessageLong(hWnd, LVM_GETEXTENDEDLISTVIEWSTYLE, 0&, 0&)
lvStyle = lvStyle Or IIf(Doublebuffer = True, LVS_EX_DOUBLEBUFFER, 0&) Or _
IIf(FullRowSelect = True, LVS_EX_FULLROWSELECT, 0&) Or _
IIf(InfoTip = True, LVS_EX_INFOTIP, 0&) Or _
IIf(HeaderDragDrop = True, LVS_EX_HEADERDRAGDROP, 0&) Or _
IIf(GridLines = True, LVS_EX_GRIDLINES, 0&)
lRetVal = SendMessageLong(hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0&, ByVal lvStyle)
If HeaderOnTop Then
lStyle = GetWindowLong(hWnd, GWL_STYLE)
lStyle = (lStyle Or WS_CLIPCHILDREN)
Call SetWindowLong(hWnd, GWL_STYLE, lStyle)
End If
End Function UserForm:
Private Sub Form_Load()
'Microsoft Common Controls 5.0
SetLWStyle ListView1.hWnd, True, True, False, False, False, False
End Sub |