MFC菜单栏的创建和使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wuguanghao/article/details/77430205

这里写图片描述

这里写图片描述

注意当我们创建菜单栏的时候,最上面的那个文字标签对应的ID是不可以编辑的,因为它无法对应一个事件,只有下拉的菜单才可以有一个ID号码,可以对应一个具体的相应事件。

菜单栏的使用和工具栏的使用有重复的地方,可以对应相同的响应事件,工具栏其实就是方便菜单栏的使用,创建一个带图片的按钮。

菜单栏的加载和显示:在系统初始化的OnInitDialog最后面添加代码如下,这里我们可以把CMenu作为一个全局的变量放在最前面

方法1:

    //CMenu menu;作为全局变量放到最前面方便更新
    menu.LoadMenuW(IDR_MENU1);
    this->SetMenu(&menu);
    menu.Detach();

方法2:

//方法2
    menu.CreateMenu();
    menu.AppendMenuW(MF_POPUP, (UINT)menu.m_hMenu, _T("ABC"));
    menu.AppendMenuW(MF_POPUP, (UINT)menu.m_hMenu, _T("编辑"));
    menu.InsertMenuW(2, MF_POPUP, (UINT)menu.m_hMenu, _T("视图"));

    menu.GetSubMenu(1)->AppendMenuW(MF_SEPARATOR);
    //在“打开”后面添加了一个分隔符,
    menu.GetSubMenu(1)->AppendMenuW(MF_STRING, ID_111, _T("关闭"));
    this->SetMenu(&menu);
    menu.Detach();

菜单栏按钮与事件的关联:

BEGIN_MESSAGE_MAP(CAutoPlatDlg, CDialogEx)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_BUTTON1, &CAutoPlatDlg::OnBnClickedButton1)//将IDC_BUTTON1与事件OnBnClickedButton1绑定
    ON_BN_CLICKED(ID_32771, &CAutoPlatDlg::OnBnClickedButton1)//将IDC_32771与事件OnBnClickedButton1绑定
END_MESSAGE_MAP()

CMenu类中几个重要的成员函数

 BOOL LoadMenu(UINT nIDResource);

加载菜单资源,并将其附加到Cmenu对象上,参数 nIDResource指定了要加载的菜单资源的ID号码,加载成功返回true,加载失败返回false;

BOOL DeleteMenu(UINT nPosition,UINT nFlags);

在菜单中删除一个菜单项,参数nPosition指定要删除的菜单项,参数nFlags就用来解释.
当nFlag为MF_BYCOMMAND时,nPosition表示菜单栏的ID,当nFlag为MF_BYPOSITION时,nPosition表示菜单栏的位置(第一个菜单项位置为0);

BOOL AppendMenu( UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );
menu.AppendMenuW(MF_POPUP, (UINT)menu.m_hMenu, _T("编辑"));

nFlag一般为MF_POPUP,nIDNewItem为创建的菜单项的ID,LPCTSTR为菜单项的名称,

BOOL InsertMenu(UINT nPosition, UINT nFlags, UINT_PTR nIDNewItem = 0,LPCTSTR lpszNewItem = NULL);

menu.InsertMenuW(2, MF_POPUP, (UINT)menu.m_hMenu, _T(“视图”));

猜你喜欢

转载自blog.csdn.net/wuguanghao/article/details/77430205