in reply to Re^4: Enumerate a Win32 Treeview
in thread Enumerate a Win32 Treeview
First, if you are using Win32::GUI, you shouldn't need to import SendMessage() yourself.
Second, you cannot just make **it up as you go along :) The description of the TVM_GETNEXTITEM message from the page I linked is:
lResult = SendMessage( // returns LRESULT in lResult (HWND) hWndControl, // handle to destination control (UINT) TVM_GETNEXTITEM, // message ID (WPARAM) wParam, // = (WPARAM) (UINT) flag; (LPARAM) lParam // = (LPARAM) (HTREEITEM) hitem; );
The wparam argument should be one of the following flags, not the length of a buffer
TVGN_CARET TVGN_CHILD TVGN_DROPHILITE TVGN_FIRSTVISIBLE TVGN_LASTVISIBLE TVGN_NEXT TVGN_NEXTVISIBLE TVGN_PARENT TVGN_PREVIOUS TVGN_PREVIOUSVISIBLE TVGN_ROOT
And the lparam argument should be either null or the handle returned from a previous call, not a pointer to a buffer.
The basic mechanism is,
Obviously, you will need to loop/recurse at each level to optain all the siblings & children at each level. It's upto you to decide whether you depth first or breadth first.
The return value from the SendMessage is the item handle to each node in the tree. As well as using this as an argument to get the next sibling or child in the tree, you also use it to send TVM_GETITEM messages to each of those items to retrive the TVMITEM(EX) structure that contains the data & state that is the node.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^6: Enumerate a Win32 Treeview
by slloyd (Hermit) on Jul 26, 2005 at 05:11 UTC | |
|
Re^6: Enumerate a Win32 Treeview
by slloyd (Hermit) on Jul 27, 2005 at 16:49 UTC |