论SetItemData和GetItemData

好久没有写随笔了,讲一下今天在Debug过程中遇到的问题:

  CListBox(列表框),CListCtrl(报表控件),CTreeCtrl(树控件), CComboBox(组合框)都有的两个这两个函数:SetItemData和GetItemData,用这两个函数给这些控件来绑定对象或者数据结构的指针非常方便。     

  在Debug过程中,遇到CListCtrl控件和CTreeCtrl的使用,双击树节点获取树节点数据,压入到ListCtrl控间当中;这其中涉及到树控件的过滤功能,我这块的过滤功能是使用树的重建来建立一颗新树。

  1、在未过滤之前获取的树节点压入到ListCtrl当中:ListCtrl.SetItemData( 0, (DWORD)pTreeItemInfo1 );

  2、过滤后重建树获取树节点压入到ListCtrl当中:ListCtrl.SetItemData( 1, (DWORD)pTreeItemInfo2 );

  3、在获取压入到ListCtrl当中的数据时,由于重建树,原有未过滤的树节点已经Destroy,CTreeItemInfo* pTreeItemInfo = (CTreeItemInfo*)ListCtrl.GetItemData(0);

  pTreeItemInfo就成为野指针,所以在使用以上两个函数的时候一定注意 要压入堆上申请的空间并且要一直存在,防止野指针的产生

posted @ 2015-09-16 21:59  礪劒  阅读(1001)  评论(0编辑  收藏  举报