存在的问题:每次显示的都是上次选中项的全路径。
双击节点或单击节点前的加号都可以正确显示,不知道单击是怎么回事。
2、要实现的功能:单击某一项,改变它的图标。
17 个解决方案
#1
不能使用单击事件的参数来判断点中哪一个节点。可以在单击事件中用HitTest来判断选中哪一个节点。
单击一项,改变图标,你的难处在哪里?不是用ImageList嘛
单击一项,改变图标,你的难处在哪里?不是用ImageList嘛
#2
在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);设置两幅不同地图片就行了
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);设置两幅不同地图片就行了
#3
1.处理CTreeCtrl的nm_click事件,hittest,然后getitemtext即可得到正确的路径
2.使用CTreeCtrl::SetItem
2.使用CTreeCtrl::SetItem
#4
CPoint pt;
GetCursorPos(&pt);
ScreenToClient(&pt);
HTREEITEM hItem = HitTest(pt);
GetCursorPos(&pt);
ScreenToClient(&pt);
HTREEITEM hItem = HitTest(pt);
#5
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);
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);
#6
又来晚了-_-b 楼主响应的消息错了吧应该响应NM_CLICK消息
然后就是上面的hittest了
然后就是上面的hittest了
#7
同意楼上的兄弟们的说法,你做的时候多参考一下MSDN
#8
多谢各位的热心 我一直不太清楚nImage 和nSelectedImage有什么不同,我用的时候都给它俩设相同的值 这会有什么隐患 还望指点
#9
iSelectedImage 在被选择状态显示的图标index
iImage 在未被选择状态显示的图标index
iImage 在未被选择状态显示的图标index
#10
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;
}
还是不行,连字符都没有了
{
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;
}
还是不行,连字符都没有了
#11
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的全路径
会是怎么回事呢
{
// 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的全路径
会是怎么回事呢
#12
iSelectedImage 在被选择状态显示的图标index
iImage 在未被选择状态显示的图标index
本来我还根据其不同状态自己去设置呢 真是绕了一个大圈子
多谢小三!!也怪我问题问得不清!
第一个问题出现的现象太怪异了 望各路高手指点。群策群力!!先行多谢了!!
iImage 在未被选择状态显示的图标index
本来我还根据其不同状态自己去设置呢 真是绕了一个大圈子
多谢小三!!也怪我问题问得不清!
第一个问题出现的现象太怪异了 望各路高手指点。群策群力!!先行多谢了!!
#13
第一个问题有了两种解决方法:
1〉在小三的程序中再加一句 pt.y -= 40;不知道这样做会不会有什么隐患 更不知道为什么不减不行
2〉用xdljf(hunter)的方法,不过函数体中的句子有点小错误,应该改为
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
TV_ITEM Temp;
Temp = pNMTreeView->itemNew;
TVITEM item = expanditem.hItem;
1〉在小三的程序中再加一句 pt.y -= 40;不知道这样做会不会有什么隐患 更不知道为什么不减不行
2〉用xdljf(hunter)的方法,不过函数体中的句子有点小错误,应该改为
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
TV_ITEM Temp;
Temp = pNMTreeView->itemNew;
TVITEM item = expanditem.hItem;
#14
给你发了短消息了, 你试试
#15
小三给出的解决方法是将ScreenToClient(&pt); 改为m_tree.ScreenToClient(&pt);不用减40了!!
这种方法还存在一个小问题:程序执行后第一次单击无效;将某个文件夹打开后单击其子文件夹,第一次单击操作无效,显示的还是原来的路径。
xdljf(hunter)的方法存在的小问题是:
将某个文件夹打开后单击其子文件夹,第一次单击的子文件夹无效,不论单击多少次,再单击其他子文件夹显示的路径就是正确的,回头单击“第一次文件夹”也是正确的。
问题比较奇怪,哪为遇到过?SOS……
这种方法还存在一个小问题:程序执行后第一次单击无效;将某个文件夹打开后单击其子文件夹,第一次单击操作无效,显示的还是原来的路径。
xdljf(hunter)的方法存在的小问题是:
将某个文件夹打开后单击其子文件夹,第一次单击的子文件夹无效,不论单击多少次,再单击其他子文件夹显示的路径就是正确的,回头单击“第一次文件夹”也是正确的。
问题比较奇怪,哪为遇到过?SOS……
#16
请问有两棵同样的树,单击其中一棵,另一棵也随着变化,怎样实现
#17
这两种解决方法是没问题的,问题是我加的限制语句造成的!!
在TreeView的TVN_SELCHANGED里面处理效果更好一些
多谢各位的热心相助!!!僧多粥少,就看着给了 抱歉 !!
xingbin666(xingbin666) 不好意思,我要结帖了
在TreeView的TVN_SELCHANGED里面处理效果更好一些
多谢各位的热心相助!!!僧多粥少,就看着给了 抱歉 !!
xingbin666(xingbin666) 不好意思,我要结帖了
#1
不能使用单击事件的参数来判断点中哪一个节点。可以在单击事件中用HitTest来判断选中哪一个节点。
单击一项,改变图标,你的难处在哪里?不是用ImageList嘛
单击一项,改变图标,你的难处在哪里?不是用ImageList嘛
#2
在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);设置两幅不同地图片就行了
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);设置两幅不同地图片就行了
#3
1.处理CTreeCtrl的nm_click事件,hittest,然后getitemtext即可得到正确的路径
2.使用CTreeCtrl::SetItem
2.使用CTreeCtrl::SetItem
#4
CPoint pt;
GetCursorPos(&pt);
ScreenToClient(&pt);
HTREEITEM hItem = HitTest(pt);
GetCursorPos(&pt);
ScreenToClient(&pt);
HTREEITEM hItem = HitTest(pt);
#5
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);
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);
#6
又来晚了-_-b 楼主响应的消息错了吧应该响应NM_CLICK消息
然后就是上面的hittest了
然后就是上面的hittest了
#7
同意楼上的兄弟们的说法,你做的时候多参考一下MSDN
#8
多谢各位的热心 我一直不太清楚nImage 和nSelectedImage有什么不同,我用的时候都给它俩设相同的值 这会有什么隐患 还望指点
#9
iSelectedImage 在被选择状态显示的图标index
iImage 在未被选择状态显示的图标index
iImage 在未被选择状态显示的图标index
#10
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;
}
还是不行,连字符都没有了
{
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;
}
还是不行,连字符都没有了
#11
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的全路径
会是怎么回事呢
{
// 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的全路径
会是怎么回事呢
#12
iSelectedImage 在被选择状态显示的图标index
iImage 在未被选择状态显示的图标index
本来我还根据其不同状态自己去设置呢 真是绕了一个大圈子
多谢小三!!也怪我问题问得不清!
第一个问题出现的现象太怪异了 望各路高手指点。群策群力!!先行多谢了!!
iImage 在未被选择状态显示的图标index
本来我还根据其不同状态自己去设置呢 真是绕了一个大圈子
多谢小三!!也怪我问题问得不清!
第一个问题出现的现象太怪异了 望各路高手指点。群策群力!!先行多谢了!!
#13
第一个问题有了两种解决方法:
1〉在小三的程序中再加一句 pt.y -= 40;不知道这样做会不会有什么隐患 更不知道为什么不减不行
2〉用xdljf(hunter)的方法,不过函数体中的句子有点小错误,应该改为
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
TV_ITEM Temp;
Temp = pNMTreeView->itemNew;
TVITEM item = expanditem.hItem;
1〉在小三的程序中再加一句 pt.y -= 40;不知道这样做会不会有什么隐患 更不知道为什么不减不行
2〉用xdljf(hunter)的方法,不过函数体中的句子有点小错误,应该改为
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
TV_ITEM Temp;
Temp = pNMTreeView->itemNew;
TVITEM item = expanditem.hItem;
#14
给你发了短消息了, 你试试
#15
小三给出的解决方法是将ScreenToClient(&pt); 改为m_tree.ScreenToClient(&pt);不用减40了!!
这种方法还存在一个小问题:程序执行后第一次单击无效;将某个文件夹打开后单击其子文件夹,第一次单击操作无效,显示的还是原来的路径。
xdljf(hunter)的方法存在的小问题是:
将某个文件夹打开后单击其子文件夹,第一次单击的子文件夹无效,不论单击多少次,再单击其他子文件夹显示的路径就是正确的,回头单击“第一次文件夹”也是正确的。
问题比较奇怪,哪为遇到过?SOS……
这种方法还存在一个小问题:程序执行后第一次单击无效;将某个文件夹打开后单击其子文件夹,第一次单击操作无效,显示的还是原来的路径。
xdljf(hunter)的方法存在的小问题是:
将某个文件夹打开后单击其子文件夹,第一次单击的子文件夹无效,不论单击多少次,再单击其他子文件夹显示的路径就是正确的,回头单击“第一次文件夹”也是正确的。
问题比较奇怪,哪为遇到过?SOS……
#16
请问有两棵同样的树,单击其中一棵,另一棵也随着变化,怎样实现
#17
这两种解决方法是没问题的,问题是我加的限制语句造成的!!
在TreeView的TVN_SELCHANGED里面处理效果更好一些
多谢各位的热心相助!!!僧多粥少,就看着给了 抱歉 !!
xingbin666(xingbin666) 不好意思,我要结帖了
在TreeView的TVN_SELCHANGED里面处理效果更好一些
多谢各位的热心相助!!!僧多粥少,就看着给了 抱歉 !!
xingbin666(xingbin666) 不好意思,我要结帖了