1,486
社区成员
发帖
与我相关
我的任务
分享
Public Sub CheckExpand(ByVal nodX As MSComctlLib.Node, trcX As CTreeCtl)
On Error GoTo Err_CheckExpand
Dim hItem As Long
Dim hTvw As Long
Dim udtTVI As TV_ITEM
hTvw = trcX.m_tvw.hwnd
'先获得nodx的句柄
nodX.Selected = True
hItem = SendMessageLong(hTvw, TVM_GETNEXTITEM, TVGN_CARET, 0)
'再获得nodx的lparam
With udtTVI
.hItem = hItem
.mask = TVIF_PARAM
End With
Call SendMessage(hTvw, TVM_GETITEM, 0, udtTVI)
' SendMessage(GetDlgItem(hWnd, ID_TREEVIEW), TVM_EXPAND, (WPARAM) (UINT)TVE_EXPAND, (LPARAM)hitemDrop);
Call SendMessage(hTvw, TVM_EXPAND, TVE_EXPAND, udtTVI.lParam) '运行到这一句死掉
MsgBox "aaa"
Exit Sub
Err_CheckExpand:
Stop
Debug.Print ERR.Description
Resume
End Sub
'API声明
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public 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
Public Const TV_FIRST As Long = &H1100
Public Const TVM_GETNEXTITEM As Long = TV_FIRST + 10
Public Const TVM_GETITEM = (TV_FIRST + 12)
Public Const TVM_EXPAND As Long = TV_FIRST + 2
Public Const TVE_EXPAND As Long = &H2
'typedef struct _TREEITEM FAR* HTREEITEM;
'TV_ITEM struct
Public Type TV_ITEM
mask As TV_ITEM_mask
hItem As Long
state As TV_ITEM_state
stateMask As Long
pszText As Long ' pointer
cchTextMax As Long
iImage As Long
iSelectedImage As Long
cChildren As Long
lParam As Long
End Type
Public Enum TV_ITEM_mask
TVIF_TEXT = &H1
TVIF_IMAGE = &H2
TVIF_PARAM = &H4
TVIF_STATE = &H8
TVIF_HANDLE = &H10
TVIF_SELECTEDIMAGE = &H20
TVIF_CHILDREN = &H40
TVIF_DI_SETITEM = &H1000 ' Notification
End Enum
Public Enum TV_ITEM_state
TVIS_SELECTED = &H2
TVIS_CUT = &H4
TVIS_DROPHILITED = &H8
TVIS_BOLD = &H10
TVIS_EXPANDED = &H20
TVIS_EXPANDEDONCE = &H40
TVIS_EXPANDPARTIAL = &H80
TVIS_OVERLAYMASK = &HF00
TVIS_STATEIMAGEMASK = &HF000
TVIS_USERMASK = &HF000
End Enum
' TVM_GETNEXTITEM wParam values
Public Enum TVGN_Flags
TVGN_ROOT = &H0
TVGN_NEXT = &H1
TVGN_PREVIOUS = &H2
TVGN_PARENT = &H3
TVGN_CHILD = &H4
TVGN_FIRSTVISIBLE = &H5
TVGN_NEXTVISIBLE = &H6
TVGN_PREVIOUSVISIBLE = &H7
TVGN_DROPHILITE = &H8
TVGN_CARET = &H9
#If (WIN32_IE >= &H400) Then ' >= Comctl32.dll v4.71
TVGN_LASTVISIBLE = &HA
#End If
End Enum
Public Sub CheckExpand(ByVal nodX As MSComctlLib.Node, trcX As CTreeCtl)
On Error GoTo Err_CheckExpand
Dim hItem As Long
Dim hTvw As Long
hTvw = trcX.m_tvw.hwnd
nodX.Selected = True
hItem = SendMessageLong(hTvw, TVM_GETNEXTITEM, TVGN_CARET, 0)
Call SendMessageLong(hTvw, TVM_EXPAND, TVE_EXPAND, hItem)
MsgBox "aaa"
Exit Sub
Err_CheckExpand:
Stop
Debug.Print ERR.Description
Resume
End Sub