关于树控件的几个问题 1、要实现的功能:单击某一项,在一个编辑框里显示该项的全路径。 存在的问题:每次显示的都是上次选中项的全路径。 双击节点或单击节点前的加号都可以正确显示,不知道单击是怎么回事。2、要实现的功能:单击某一项,改变它的图标。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不能使用单击事件的参数来判断点中哪一个节点。可以在单击事件中用HitTest来判断选中哪一个节点。单击一项,改变图标,你的难处在哪里?不是用ImageList嘛 在TreeView的TVN_SELCHANGED里面处理void CEditTreeCtrl::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult){ NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; TVITEM item = pNMTreeView->itemNew; //here is your code to update the edit caption *pResult = 0;}2、用SetItemImage(htiSon, 0, 1);设置两幅不同地图片就行了 1.处理CTreeCtrl的nm_click事件,hittest,然后getitemtext即可得到正确的路径2.使用CTreeCtrl::SetItem CPoint pt;GetCursorPos(&pt);ScreenToClient(&pt);HTREEITEM hItem = HitTest(pt); 1。void CTest6Dlg::OnClickTree1(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; CPoint pt; GetCursorPos(&pt); ScreenToClient(&pt); HTREEITEM hItem = m_tree.HitTest(pt); //显示路径 *pResult = 0;}2。TV_ITEM* pItem;pItem.hItem = hItem;pItem.iSelectedImage = ??;pItem.iImage = ??;.....m_tree.SetItem(pItem); 又来晚了-_-b 楼主响应的消息错了吧应该响应NM_CLICK消息 然后就是上面的hittest了 同意楼上的兄弟们的说法,你做的时候多参考一下MSDN 多谢各位的热心 我一直不太清楚nImage 和nSelectedImage有什么不同,我用的时候都给它俩设相同的值 这会有什么隐患 还望指点 iSelectedImage 在被选择状态显示的图标indexiImage 在未被选择状态显示的图标index void CMainDlg::OnClickTree(NMHDR* pNMHDR, LRESULT* pResult) { CPoint pt; GetCursorPos(&pt); ScreenToClient(&pt); HTREEITEM hItem = m_tree.HitTest(pt); CString str; str.Format("%s",m_tree.GetItemText(hItem)); AfxMessageBox(str); *pResult = 0;}还是不行,连字符都没有了 1、void CTest6Dlg::OnClickTree1(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; CPoint pt; GetCursorPos(&pt); ScreenToClient(&pt); HTREEITEM hItem = m_tree.HitTest(pt); //得到该项的全路径 //显示路径 *pResult = 0;}结果显示的不是上次选中项的路径了,而是位于选中项的下面项的下面的那一项的路径譬如:(在树中的上下位置)a节点下面是b节点,再下面是c节点,选a则显示c的全路径会是怎么回事呢 iSelectedImage 在被选择状态显示的图标indexiImage 在未被选择状态显示的图标index本来我还根据其不同状态自己去设置呢 真是绕了一个大圈子多谢小三!!也怪我问题问得不清!第一个问题出现的现象太怪异了 望各路高手指点。群策群力!!先行多谢了!! 第一个问题有了两种解决方法:1〉在小三的程序中再加一句 pt.y -= 40;不知道这样做会不会有什么隐患 更不知道为什么不减不行2〉用xdljf(hunter)的方法,不过函数体中的句子有点小错误,应该改为NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; TV_ITEM Temp; Temp = pNMTreeView->itemNew; TVITEM item = expanditem.hItem; 小三给出的解决方法是将ScreenToClient(&pt); 改为m_tree.ScreenToClient(&pt);不用减40了!!这种方法还存在一个小问题:程序执行后第一次单击无效;将某个文件夹打开后单击其子文件夹,第一次单击操作无效,显示的还是原来的路径。xdljf(hunter)的方法存在的小问题是:将某个文件夹打开后单击其子文件夹,第一次单击的子文件夹无效,不论单击多少次,再单击其他子文件夹显示的路径就是正确的,回头单击“第一次文件夹”也是正确的。问题比较奇怪,哪为遇到过?SOS…… 这两种解决方法是没问题的,问题是我加的限制语句造成的!!在TreeView的TVN_SELCHANGED里面处理效果更好一些 多谢各位的热心相助!!!僧多粥少,就看着给了 抱歉 !!xingbin666(xingbin666) 不好意思,我要结帖了 请教,SDK和DLL是什么关系呢? 如何让Edit控件不能输入同时不改变它的背景色? ListCtrl的自动提示 VC在windows NT下安装为什么总不正常? 简单问题,关于文件的,各位大哥来出个主意 AroundClockDancer,你说的站点我找到了,来领分! 地址分配?? 为什么只有一个线程运行 而且有时输出数据个数还不一样? 请问哪位高手可以给我一个扁平滚动条的例子吗? 这样的生活我接近崩溃,请指点下我! ##############菜鸟的问题#################### 一个有关线程挂起的问题
单击一项,改变图标,你的难处在哪里?不是用ImageList嘛
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
TVITEM item = pNMTreeView->itemNew; //here is your code to update the edit caption
*pResult = 0;
}2、用SetItemImage(htiSon, 0, 1);设置两幅不同地图片就行了
2.使用CTreeCtrl::SetItem
GetCursorPos(&pt);
ScreenToClient(&pt);HTREEITEM hItem = HitTest(pt);
void CTest6Dlg::OnClickTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; CPoint pt;
GetCursorPos(&pt);
ScreenToClient(&pt); HTREEITEM hItem = m_tree.HitTest(pt);
//显示路径 *pResult = 0;
}
2。TV_ITEM* pItem;
pItem.hItem = hItem;
pItem.iSelectedImage = ??;
pItem.iImage = ??;.....
m_tree.SetItem(pItem);
iImage 在未被选择状态显示的图标index
{
CPoint pt;
GetCursorPos(&pt);
ScreenToClient(&pt);
HTREEITEM hItem = m_tree.HitTest(pt); CString str;
str.Format("%s",m_tree.GetItemText(hItem));
AfxMessageBox(str);
*pResult = 0;
}还是不行,连字符都没有了
{
// TODO: Add your control notification handler code here
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; CPoint pt;
GetCursorPos(&pt);
ScreenToClient(&pt); HTREEITEM hItem = m_tree.HitTest(pt);
//得到该项的全路径
//显示路径 *pResult = 0;
}
结果显示的不是上次选中项的路径了,而是位于选中项的下面项的下面的那一项的路径
譬如:(在树中的上下位置)a节点下面是b节点,再下面是c节点,选a则显示c的全路径
会是怎么回事呢
iImage 在未被选择状态显示的图标index
本来我还根据其不同状态自己去设置呢 真是绕了一个大圈子
多谢小三!!也怪我问题问得不清!
第一个问题出现的现象太怪异了 望各路高手指点。群策群力!!先行多谢了!!
1〉在小三的程序中再加一句 pt.y -= 40;不知道这样做会不会有什么隐患 更不知道为什么不减不行
2〉用xdljf(hunter)的方法,不过函数体中的句子有点小错误,应该改为
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
TV_ITEM Temp;
Temp = pNMTreeView->itemNew;
TVITEM item = expanditem.hItem;
这种方法还存在一个小问题:程序执行后第一次单击无效;将某个文件夹打开后单击其子文件夹,第一次单击操作无效,显示的还是原来的路径。xdljf(hunter)的方法存在的小问题是:
将某个文件夹打开后单击其子文件夹,第一次单击的子文件夹无效,不论单击多少次,再单击其他子文件夹显示的路径就是正确的,回头单击“第一次文件夹”也是正确的。问题比较奇怪,哪为遇到过?SOS……
在TreeView的TVN_SELCHANGED里面处理效果更好一些
多谢各位的热心相助!!!僧多粥少,就看着给了 抱歉 !!
xingbin666(xingbin666) 不好意思,我要结帖了