树形控件响应鼠标单击, 想要获取结点值赋值给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);
单击树形控件消息响应函数如下:
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);
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();
}
你这样的应该把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();
}