我设置了结构体,来存放TREE节点的信息,如果下struct tagDotTreeFlag
{
BYTE flag;
BYTE node;
         BYTE line;
BYTE rtu;   
BYTE dot;       
int  type;   
};//-----赋值部分----
tagDotTreeFlag treeData; 
DWORD itemData;
treeData.flag=4;
treeData.node=1; 
treeData.line=2;
treeData.rtu =3;   
treeData.dot =4;
treeData.type = 5; 
memcpy((unsigned char*)&itemData,(unsigned char*)&treeData,sizeof(DWORD));
m_tree.SetItemData(hsel ,itemData); //设置该节点值 
//----取值部分------
tagDotTreeFlag  treeData;
DWORD itemData;
itemData=m_tree.GetItemData(hSel);
memcpy((unsigned char*)&treeData,(unsigned char*)&itemData,sizeof(DWORD));
但dot 和type 的值无法取到,为什么?

解决方案 »

  1.   

    如果,你的ItemData Set和Get不在同一个作用域,值要new在堆里,并且保证GetItemData的时候还没有Delete这个ItemData 。
      

  2.   

    但我flag,node,line,rtu的值都能拿到         
    就是dot和type取不到
      

  3.   

    因为TreeCtrl 的ItemData只是给TreeItem保存了一个ItemData的指针。并没有深层拷贝。而你是把一个结构局部变量SetItemData,但是,如果GetItemData不和你SetItemData在同一个作用域的话,你这个tagDotTreeFlag 就要被释放掉。所以就无法Get到。解决方法就是New在堆中。然后另一个地方就可以GetItemData。
      

  4.   

    这是因为,ItemData是一个DWORD_PTR类型,刚好四个BYTE,只有你的结构的前四个BYTE保存下来了。你没发现吗?