How to use 'SetItemData()' and 'GetItemData()'?

来源:互联网 发布:java 通讯协议 编辑:程序博客网 时间:2024/06/05 09:55
Q: How to use 'GetItemData()' and 'SetItemData()'?

A: A tree control is just a visual representation of some hierarchical data structure. You use 'SetItemData()' and 'GetItemData()' to link each tree item to a node if this data structure.

Firstly you have to define a class or a structure that holds the data for each node. For example if your tree is supposed to show a file system, the structure you define will reflect all the properties of a file, like name, size, timestamp, whether it is a directory or not, access rights and so on. The tree will display only the name. Each of the trees items will be linked to an instance of such a structure.

Code:
struct node_data{  //...};
'SetItemData()' allows you to attach a 'DWORD' to each item and 'GetItemData()' allows you to get that 'DWORD' back. A plain 'DWORD' isn't of much use, but luckily under Windows a 'DWORD' and a pointer have the same size, so you can cast forth and back between them.

When you add an item to the tree, you attach a pointer to a 'node_data' structure to that item:

Code:
HTREEITEM hItem = m_tree.InsertItem(/*...*/);node_data *node = new node_data();// Fill up the new nodenode->member = value;    //...// Attach the node to the itemm_tree.SetItemData(hItem, (DWORD) node);
When you handle an operation on some item of the tree (for example selection) you retrieve the node using 'GetItemData()':

Code:
// 'hItem' is a valid iten handlenode_data *node = (node_data *) m_tree.GetItemData(hItem);// Retrieve, set or take decisions according to the nodes // membersif(node->member == some_value)  some_action();value = node->member;node->member = value;
转帖:http://www.codeguru.com/forum/showthread.php?t=231227