我正在使用 CTreeCtrl 来显示一些数据。对于树中的每个条目,我都有一些关联的数据,我将它们保存在一个结构中。通过将指向结构的指针放在树中每个条目的 lParam 值中,我将这些数据与项目一起保存。
这是我向树中添加条目的代码:
void CClassView::AddElementToTree(Element* _pElement, HTREEITEM _hRoot)
{
HTREEITEM hBranch;
TVINSERTSTRUCT tvInsert;
ZeroMemory(&tvInsert, sizeof(tvInsert));
tvInsert.hParent = _hRoot;
tvInsert.hInsertAfter = NULL;
tvInsert.item.mask = TVIF_TEXT;
WCHAR szText[64] = {'\0'};
tvInsert.item.pszText = szText;
for(std::vector<Element*>::iterator i = _pElement->pChildren.begin(); i != _pElement->pChildren.end(); ++i)
{
wcscpy_s(szText, (*i)->GetName().c_str());
tvInsert.item.lParam = (LPARAM)(*i);
hBranch = m_wndClassView.InsertItem(&tvInsert);
AddElementToTree(*i, hBranch);
}
}
本质上,这个函数递归地向树中添加一个元素及其子元素。_pElement
我通过外部。这是我班级的成员变量,所以我知道除非程序结束,否则它不会被破坏。
当用户在树视图中选择一个条目时,我处理 selchanged 消息:
void CLayerTree::OnTvnSelchanged(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
Element* pElement = (Element*)pNMTreeView->itemNew.lParam;
*pResult = 0;
}
pElement
总是NULL
。我调试了程序,它似乎lParam
也为零。
我做错什么了吗?我知道我的结构的内存没有被释放。我正在将条目添加到树中是否有问题?
任何帮助,将不胜感激。