树形控件响应鼠标单击, 想要获取结点值赋值给m_pCurrentNode, 但是发现单击不同的结点m_pCurrentNode的值都是插入时的最后一个节点值。
单击树形控件消息响应函数如下:
void CHGCallClientDlg::OnClickTreeNet(NMHDR* pNMHDR, LRESULT* pResult) 
{
UpdateData();
HTREEITEM    hSelectItem = NULL;         //selected item
HTREEITEM    hParentItem = NULL;         //parent item
HTREEITEM    hGrandfatherItem = NULL;    //grandparent item
TVITEM    tvItem;
NODE_PROPERTY  *pSelectNode = NULL; CPoint cPoint;
UINT   uFlags;
GetCursorPos(&cPoint);
m_NetTree.ScreenToClient(&cPoint);
hSelectItem = m_NetTree.HitTest(cPoint, &uFlags);
if (hSelectItem != NULL && (TVHT_ONITEM & uFlags))
{
m_NetTree.SetFocus();
m_NetTree.Select(hSelectItem,TVGN_CARET);
}
else
{
return;
}
if (hSelectItem == m_hRoot)
return;
hParentItem = m_NetTree.GetParentItem(hSelectItem);
memset(&tvItem,  0, sizeof(tvItem));
tvItem.mask = TVIF_HANDLE|TVIF_PARAM;
tvItem.hItem = hSelectItem;
m_NetTree.GetItem(&tvItem);

if (hParentItem == m_hRoot)
m_pCurrentNode = (NODE_PROPERTY *)tvItem.lParam;
*pResult = 0;
}插入节点时的代码如下 strcpy(pNode->szGUID, strCamGUID);
strcpy(pNode->szName, strName); ZeroMemory(buf, 0, 128);
sprintf(buf,"%s  %s", strCamGUID, strName);

tvInsert.hParent = m_hRoot;
tvInsert.hInsertAfter = TVI_LAST;
tvInsert.item.mask = TVIF_PARAM|TVIF_TEXT;
tvInsert.item.pszText = buf;
tvInsert.item.cchTextMax = sizeof(buf);
tvInsert.item.lParam = (LPARAM)pNode;

m_NetTree.InsertItem(&tvInsert);

解决方案 »

  1.   

    插入的地方的代码还不够,这样看不出来你的pNode是否是同一个
      

  2.   

    m_hRoot = m_NetTree.InsertItem(strTemp, 0, 0);
    while(!m_pRecordset ->EndOfFile)
    {
    _variant_t varcamguid;
    _variant_t varName; varcamguid = m_pRecordset->GetCollect ("camguid");
    varName = m_pRecordset->GetCollect ("name");

    strCamGUID =(char *)_bstr_t(varcamguid);
    strName =(char *)_bstr_t(varName);

    strCamGUID.TrimRight();
    strName.TrimRight();
    strcpy(pNode->szGUID, strCamGUID);
    strcpy(pNode->szName, strName); ZeroMemory(buf, 0, 128);
    sprintf(buf,"%s  %s", strCamGUID, strName);

    tvInsert.hParent = m_hRoot;
    tvInsert.hInsertAfter = TVI_LAST;
    tvInsert.item.mask = TVIF_PARAM|TVIF_TEXT;
    tvInsert.item.pszText = buf;
    tvInsert.item.cchTextMax = sizeof(buf);
    tvInsert.item.lParam = (LPARAM)pNode;

    m_NetTree.InsertItem(&tvInsert); m_pRecordset->MoveNext();
    }
      

  3.   

    pNode的定义在哪里?没看见.你的估计就是在外面定义了一个,当然就是最后一个了
    你这样的应该把pNode定义到循环体里面才行
    while(!m_pRecordset ->EndOfFile) 

    NODE_PROPERTY  *pNode =new NODE_PROPERTY();_variant_t varcamguid; 
    _variant_t varName; varcamguid = m_pRecordset->GetCollect ("camguid"); 
    varName = m_pRecordset->GetCollect ("name"); strCamGUID =(char *)_bstr_t(varcamguid); 
    strName =(char *)_bstr_t(varName); strCamGUID.TrimRight(); 
    strName.TrimRight(); 
    strcpy(pNode->szGUID, strCamGUID); 
    strcpy(pNode->szName, strName); ZeroMemory(buf, 0, 128); 
    sprintf(buf,"%s  %s", strCamGUID, strName); tvInsert.hParent = m_hRoot; 
    tvInsert.hInsertAfter = TVI_LAST; 
    tvInsert.item.mask = TVIF_PARAM|TVIF_TEXT; 
    tvInsert.item.pszText = buf; 
    tvInsert.item.cchTextMax = sizeof(buf); 
    tvInsert.item.lParam = (LPARAM)pNode; m_NetTree.InsertItem(&tvInsert); m_pRecordset->MoveNext();