CTreeCtrl 第二次点击时就不见了?????

hooliganstreet 2004-07-19 09:41:45
是不是因为加了对NM_RCLICK的响应?
当把处理函数delete后问题消失,为什么???
...全文
164 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hooliganstreet 2004-07-19
  • 打赏
  • 举报
回复


void CDataMinerView::OnRclickTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
CPoint pt;
if(::GetCursorPos((LPPOINT)&pt))
{
CTreeCtrl tmpwnd;
tmpwnd.m_hWnd=pNMHDR->hwndFrom;
HTREEITEM tmpitem=tmpwnd.GetSelectedItem();
CString str(tmpwnd.GetItemText(tmpitem));
if(str=="structure")
{
CMenu mu;
if(mu.LoadMenu(IDR_MENU1))
{
CMenu* tmpmu=mu.GetSubMenu(0);
tmpmu->TrackPopupMenu(TPM_LEFTALIGN ,pt.x,pt.y,
&tmpwnd);
}

}
else if(str=="algorithm")
{
CMenu mu;
if(mu.LoadMenu(IDR_MENU2))
{
Menu* tmpmu=mu.GetSubMenu(0);
tmpmu->TrackPopupMenu(TPM_LEFTALIGN ,pt.x,pt.y,
&tmpwnd);
}
}
}
*pResult = 1;
}
在树形控件中有两个根项algorithm和structure
这就是相应的NM_CLICK相应函数,我想对相应的项弹出相应的菜单,
但右键点一下弹出菜单后控件就消失了?谢谢lixiaosan(小三)
lixiaosan 2004-07-19
  • 打赏
  • 举报
回复
给的信息太少。无法给你回答。请贴出相应代码以供分析~~~ 谢谢合作
laker_tmj 2004-07-19
  • 打赏
  • 举报
回复
經我測試 正如  vontc2003(不过如此)

所說,又學到一點 謝謝!!!
lixiaosan 2004-07-19
  • 打赏
  • 举报
回复
CPoint myPoint;

GetCursorPos(&myPoint);
m_tree.ScreenToClient(&myPoint);

UINT uFlags;
HTREEITEM hItem = m_treeDevList.HitTest(myPoint, &uFlags);
vontc2003 2004-07-19
  • 打赏
  • 举报
回复
问题可能是这样的:
CTreeCtrl的窗口句柄是你的控件的句柄,不辛的是tmpwnd是一个栈对象,在超出他的作用域后,该对象将被销毁,而他却拥有你的树形控件的窗口句柄,所以你的树形控件会由于这个临时对象的消失而被销毁.

我看到你的tempwnd仅仅是为了取得ItemText,所以,建议你不要使用tempwnd这个临时对象获得,可是使用HitTest.
lixiaosan 2004-07-19
  • 打赏
  • 举报
回复
GetCursorPos
后再试试
m_tree.ScreenToClient(&pt);

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧