0

我正在使用 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也为零。

我做错什么了吗?我知道我的结构的内存没有被释放。我正在将条目添加到树中是否有问题?

任何帮助,将不胜感激。

4

1 回答 1

4

TVIF_PARAM 必须在掩码中设置!

于 2014-02-02T17:47:05.943 回答