//--服务器设置
tree_server.ModifyStyle(NULL,TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT); 
HTREEITEM hItem = tree_server.InsertItem("电信服务器",NULL,NULL); tree_server.InsertItem("电信服务器一",NULL,NULL,hItem); 
tree_server.InsertItem("电信服务器二",NULL,NULL,hItem); 
tree_server.InsertItem("电信服务器三",NULL,NULL,hItem);   tree_server.SetItemHeight(20); HTREEITEM fItem = tree_server.InsertItem("网通服务器",NULL,NULL); tree_server.InsertItem("网通服务器一",NULL,NULL,fItem); 
tree_server.InsertItem("网通服务器二",NULL,NULL,fItem); 
tree_server.InsertItem("网通服务器三",NULL,NULL,fItem); 
我的代码是这样的

void CMFC_UPDATEDlg::OnTvnSelchangedTreeServer(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码 //n_ServerSelect  =  TreeView_GetSelection(GetDlgItem(IDC_TREE_SERVER));  HTREEITEM hSel=tree_server.GetSelectedItem();
DWORD ids ; if (!hSel)
return ;
else
{
if(!tree_server.ItemHasChildren(hSel))
{
cText = tree_server.GetItemText(hSel); ids = tree_server.GetItemData(hSel);          //为什么这个ids总是0了,为什么不是我选中项的序号了,谢谢 }

}
*pResult = 0;
}

解决方案 »

  1.   

    首先要明白一点GetItemData是取当前Item所关联的数据,并不是你所理解的序号,要用到GetItemData,必需先要SetItemData,你都没用SetItemData,当然取到的是0
      

  2.   

    void CMFC_UPDATEDlg::OnTvnSelchangedTreeServer(NMHDR *pNMHDR, LRESULT *pResult)
    {
        LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
        // TODO: 在此添加控件通知处理程序代码    HTREEITEM hSel = pNMTreeView->itemNew.hItem; //获取选取的节点。
        ...    *pResult = 0;
    }
      

  3.   

    刚才没看清题目。可以在 InsertItem 时设置 LPARAM lParam 参数的值,这样在使用 GetItemData 时才会返回节点的附加数据。
      

  4.   

    HTREEITEM CTreeCtrl::InsertItem(UINT nMask, LPCTSTR lpszItem, int nImage, int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam, HTREEITEM hParent, HTREEITEM hInsertAfter );指定 nMask 参数为:LVIF_TEXT | LVIF_PARAM;然后指定 lParam 参数为与节点关联的数据,它就是 CTreeCtrl::GetItemData 的返回值了。也可以使用 HTREEITEM InsertItem(LPTVINSERTSTRUCT lpInsertStruct) 的形式,在添加节点时设置关联数据。或使用 1 楼的方法,在添加完节点后使用 SetItemData 来设置与节点关联的数据。
      

  5.   

    HTREEITEM  hTreeitem = tree_server.InsertItem("网通服务器一",NULL,NULL,fItem);  tree_server.SetItemData(hTreeitem,(DWORD)xxx);//这里设置你要设置的数据