• 抬起头,继续前进吧,去把这个不完美的故事,变成你成所期望的样子
  • 登山路上我们会放弃很多东西,但这些被我们丢掉在我们登上山顶之际,都会一一回来
  • 不论开发还是逆向,数学水平的高低直接决定了”你的饭碗里有没有肉”
  • 万丈高楼平地起,勿在浮沙筑高台

Windows MFC-CMenu对象加载指定的Memu资源并在指定位置弹出

C++ 菜鸟 10个月前 (12-25) 3226次浏览 已收录 0个评论

目标

在 MFC 中根据自定义的 Menu 资源生成 CMenu 对象,并在指定位置弹出

API

LordMenu:加载 Menu 资源
GetSubMenu:获取子 Menu
TrackPopupMenu:在指定位置弹出菜单

代码示例

(以 HostList 的 NM_RCLICK 消息处理为例)

void CHostListView::OnNMRClick(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMITEMACTIVATE pNMItemActivate = 
        reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);

    CListCtrl &lstHostList = GetListCtrl();

    CMenu menuPop;
    menuPop.LoadMenu(IDR_MENU_HOSTLIST_RBTNDOWN_SELECTED);

    CPoint Point;
    GetCursorPos(&Point);

    // switch the point.
    lstHostList.ScreenToClient(&Point);
    UINT uiFlags = 0;
    CMenu *pSubMenu = NULL;

    do
    {
        int iIndex = lstHostList.HitTest(Point, &uiFlags);
        if (iIndex != -1 &&
            uiFlags & LVHT_ONITEMLABEL)
        {
            pSubMenu = menuPop.GetSubMenu(0);
        }
        else
        {
            break;
        }

        // Swith the point from client area to all screen.
        lstHostList.ClientToScreen(&Point);
        // Popup the menu.
        pSubMenu->TrackPopupMenu(TPM_RIGHTBUTTON, Point.x, Point.y, this);
    } while (FALSE);

    *pResult = 0;
}

学习心得 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Windows MFC-CMenu 对象加载指定的 Memu 资源并在指定位置弹出
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址