Option Explicit
Private Const WS_CHILD = &H40000000
Private Const WS_VISIBLE = &H10000000
Private Const LVS_REPORT = &H1
Private Declare Function CreateWindowEx Lib "user32.dll" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, ByRef lpParam As Any) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Type LVCOLUMN
Mask As Long
Fmt As Long
cX As Long
pszText As String
cchTextMax As Long
iSubItem As Long
iImage As Long
iOrder As Long
End Type
Private Const LVM_INSERTCOLUMNA = &H101B
Private Const LVCF_WIDTH = &H2
Private Const LVCF_TEXT = &H4
Private Type LVITEM
Mask As Long
iItem As Long
iSubItem As Long
State As Long
StateMask As Long
pszText As String
cchTextMax As Long
iImage As Long
lParam As Long
iIndent As Long
End Type
Private Const LVIF_TEXT = &H1
Private Const LVM_INSERTITEMA = &H1007
Private Const LVM_SETITEMA = &H1006
Private LVhWnd As Long
Private Sub Form_Load()
Dim dwStyle As Long
dwStyle = WS_CHILD Or WS_VISIBLE Or LVS_REPORT
LVhWnd = CreateWindowEx(0, "SysListView32", vbNullString, dwStyle, 0, 0, 500, 600, Me.hWnd, 0, App.hInstance, ByVal 0)
Call ColumnHeadAdd(0, "第 1 列")
Call ColumnHeadAdd(1, "第 2 列")
Call RowAdd(0, "行 1")
Call RowSubAdd(0, 1, "子列 2")
Call RowAdd(1, "行 2")
Call RowSubAdd(1, 1, "子列 2")
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call DestroyWindow(LVhWnd)
End Sub
Private Sub ColumnHeadAdd(ByVal Index As Long, ByVal Text As String)
Dim ColHead As LVCOLUMN
With ColHead
.Mask = LVCF_WIDTH Or LVCF_TEXT
.cX = 100
.pszText = Text
End With
Call SendMessage(LVhWnd, LVM_INSERTCOLUMNA, Index, ColHead)
End Sub
Private Sub RowAdd(ByVal Index As Long, ByVal Text As String)
Dim iItem As LVITEM
With iItem
.Mask = LVIF_TEXT
.iItem = Index
.pszText = Text
End With
Call SendMessage(LVhWnd, LVM_INSERTITEMA, 0, iItem)
End Sub
Public Sub RowSubAdd(ByVal Row As Long, ByVal Index As Long, ByVal Text As String)
Dim iItem As LVITEM
With iItem
.Mask = LVIF_TEXT
.iItem = Row
.iSubItem = Index
.pszText = Text
End With
Call SendMessage(LVhWnd, LVM_SETITEMA, 0, iItem)
End Sub