嗨:yu_hl(卖火柴的小男孩)
我用你的方法出现了非法操作
CMenu Menu;
Menu.LoadMenu(IDR_MENU1);
LPPOINT p;
GetCursorPos(p);
Menu.GetSubMenu(0)->
TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON,p->x, p->y,this);
我用你的方法出现了非法操作
CMenu Menu;
Menu.LoadMenu(IDR_MENU1);
LPPOINT p;
GetCursorPos(p);
Menu.GetSubMenu(0)->
TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON,p->x, p->y,this);
GetCursorPos(&p);
CPoint p;
GetCursorPos(&p);
GetCursorPos(p);明白了吗?访问没有分配的指针就会非法操作
当然,用LPPOINT还要delete
所以就用POINT好了
在CTreeCtrl里的任何地方点右键都会出菜单的。我添加了一下代码但在CTreeCtrl的空白地方点右键时Hitem不等NULL,而是CTreeCtrl的第一级树
HTREEITEM Hitem;
Hitem=m_Tree.GetSelectedItem();
if(Hitem!=NULL)
{
CMenu Menu;
Menu.LoadMenu(IDR_MENU1);
CPoint p;
GetCursorPos(&p);
Menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON,p.x, p.y,this); }
{
CPoint pt;
CMenu menu;
CTreeCtrl& cThisTree = GetTreeCtrl(); HTREEITEM SelItem = cThisTree.HitTest( point, &nFlags ); if (SelItem == NULL) return ;//未选中树形控件,则返回 cThisTree.SelectItem(SelItem) ;//取得当前所选节点 menu.CreatePopupMenu();
menu.AppendMenu(0,ID_USER1,"菜单一");
menu.AppendMenu(0,ID_USER2,"菜单二");
GetCursorPos(&pt);
menu.TrackPopupMenu(TPM_RIGHTBUTTON,pt.x,pt.y,this);
ptAction=pt;}
void CTreeDlg::OnRclickTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
CPoint pt;
CMenu menu;
UINT nFlags; HTREEITEM SelItem = m_Tree.HitTest( pt, &nFlags );
if (SelItem == NULL) return ;//未选中树形控件,则返回
m_Tree.SelectItem(SelItem) ;//取得当前所选节点 menu.CreatePopupMenu();
menu.AppendMenu(0,IDR_MENU1,"菜单一");
GetCursorPos(&pt);
menu.TrackPopupMenu(TPM_RIGHTBUTTON,pt.x,pt.y,this);
*pResult = 0;
}
所以推荐你在OnRButtonDown中加入以上代码。
你的ptAction=pt;是干什么用的?