CMenu m,*pm
if(!m.LoadMenu(IDR_MENU1)) MessageBox(_T("err"))//IDR_MENU1是相应的资源id
pm=m.GetSubMenu(0)//获取子对话框
CPoint pot
GetCursorPos(&pot)//获取鼠标当前位置
pm->TrackPopupMenu(TPM_LEFTALIGN,pot.x,pot.y,this)//在鼠标位置d出菜单
注意,上面的pm是获取的是第一个主menu项下的子menu,比如设计menu资源的时候主menu从左到右是1,2,3,其中1下面又添加了4,5,6
那么这个程序d出的menu就是4,5,6
自己建个工程体会一下就知道了
void C...View::OnRButtonDown(UINT nFlags, CPoint point){
CMenu menu
menu.LoadMenu(IDR_MENU1)
CMenu *pop = menu.GetSubMenu(0)
ClientToScreen(&point)
pop->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,point.x,point.y,GetParent())
CView::OnRButtonDown(nFlags, point)
}
你在资源里先建一个菜单(上例中菜单ID为IDR_MENU1),然后在C..View类里添加右键点击事件,然后代码如上就可以了
主要是用TrackPopupMenu才实现。新建一个菜单资源IDR_MENU1,然后为View类添加OnContextMenu类添加消息,添加如下代码:
void CRMenuView::OnContextMenu(CWnd* pWnd, CPoint point)
{
// TODO: Add your message handler code here
CMenu m_popMenu
m_popMenu.LoadMenu(IDR_MENU1)
CMenu* pSubMenu=m_popMenu.GetSubMenu(0)
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,point.x,point.y,this)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)