VCMFC怎样添加右键菜单

VCMFC怎样添加右键菜单,第1张

思路是这样的,先在资源面板里添加一个menu资源,编辑成自己想要的,完成以后在需要右键单击触发的地方添加右键单击事件,代码里写入d出这个menu

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

自己建个工程体会一下就知道了

在VC++6.0中,在project -》addtoproject-》……之后进行选择就可以为工程添加一个单击右键d出菜单功能,但是在VS中没有Pop-Up Menu组件,右键菜单需要手动添加。添加方法如下:

1、在资源视图中添加所需的右键菜单

2、选择相应的类,单文档时选中View类在属性中添加WM_CONTEXTMENU消息

3、在OnContextMenu添加如下代码

void CMenu3View::OnContextMenu(CWnd* , CPoint point)

{

    // TODO: 在此处添加消息处理程序代码

    if (point.x == -1 && point.y == -1)

    {

        CRect rect

        GetClientRect(rect)

        ClientToScreen(rect)

        point = rect.TopLeft()

        point.Offset(5, 5)

    }

    CMenu menu

    VERIFY(menu.LoadMenu(CG_IDR_POPUP_TYPING_TEST_VIEW))        //CG_IDR_POPUP_TYPING_TEST_VIEW为菜单ID

    CMenu* pPopup = menu.GetSubMenu(0)

    ASSERT(pPopup != NULL)

    CWnd* pWndPopupOwner = this

    while (pWndPopupOwner->GetStyle() & WS_CHILD) 

    pWndPopupOwner = pWndPopupOwner->GetParent()

    pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,pWndPopupOwner)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11736380.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存