• 关于MFC主菜单和右键弹出菜单


    一、主菜单、弹出菜单和右键菜单的概念:

    主菜单是窗口顶部的菜单,一个窗口或对话框只能有一个主菜单,但是主菜单可以被更改(SetMenu()更改);

    创建方式:CMenu::CreateMenu(void);

    弹出菜单在菜单项中是带有右向小三角的菜单,主菜单的每个菜单项都是一个弹出菜单(PopMenu),因此弹出菜单是凸型或左凸型

    创建方式:CMenu::CreatePopMenu(void);

    右键菜单是点击右键弹出的菜单(响应OnContextMenu)。

    右键菜单也是菜单和弹出菜单的结合体。

    二、菜单的创建:

    菜单创建有两种方式:一是通过加载菜单资源;二是动态创建菜单。(主张通过加载资源进行创建,因为这样简单)

    通过动态创建主菜单:

    #define ID_POPUPITEM_1 10001
    #define ID_POPUPITEM_2 10002

    CMenu m_menu;
    CMenu popMenu;
    m_menu.CreateMenu();
    popMenu.CreatePopMenu();
    m_menu.AppendMenu(MF_POPUP,(UINT)popMenu.m_hMenu,_T("主菜单项1");//将弹出菜单添加到主菜单上成为了第一个菜单项,这里将弹出菜单的句柄转化成弹出菜单的ID表示弹出菜单绑定到了主菜单上
    popMenu.AppendMenu(MF_STRING,ID_POPUPITEM_1,_T("弹出菜单项1"));
    popMenu.AppendMenu(MF_STRING,ID_POPUPITEM_2,_T("弹出菜单项2"));//为弹出菜单添加子项
    SetMenu(&m_menu);//将主菜单替换成新创建的菜单
    m_menu.detach();//由于m_menu是局部变量,如果该对象不与与其绑定的菜单资源解绑,则该对象销毁时也会销毁菜单资源,因此需要解绑
    popMenu.detach();//同理解绑

    通过资源模版创建主菜单:

    CMenu m_menu;
    m_menu.LoadMenu(ID_MAINMENU);
    SetMenu(&m_menu);
    m_menu.detach();

    弹出菜单创建方式与主菜单类似,只是后面需要加上位置:

    void OnContextMenu(CWnd* pWnd,Point point)
    {
        CMenu m_menu;
        m_menu.LoadMenu(ID_MAINMENU);
        m_menu.detach();
        m_menu.GetSubItem(0)->TrackPopMenu(TPM_LEFTALIGN, point.x, point.y, this);
    }

  • 相关阅读:
    SG函数(斐波那契博弈) Fibonacci again and again
    poj
    威佐夫博弈
    Java——类的定义
    链队列——出入队列
    Java——写一个求和 “方法”
    巴什博弈 HDU-1846
    链栈——入栈和出栈
    java——基本数据类型
    JAVA——桌球游戏(动画)
  • 原文地址:https://www.cnblogs.com/zhuluqing/p/8806933.html
Copyright © 2020-2023  润新知