[MFC]利用CMenu手工(非资源脚本)处理菜单、系统菜单

本文详细介绍了如何在MFC程序中使用CMenu类手工创建和管理菜单,包括创建菜单、修改菜单以及处理系统菜单。讲解了CMenu的CreateMenu、CreatePopupMenu、AppendMenu等函数的用法,以及菜单项的添加、删除和修改。此外,还讨论了如何将自定义菜单项添加到系统菜单中,强调了系统菜单ID的特殊性以及在OnCreate函数中进行修改的重要性。
摘要由CSDN通过智能技术生成

1. 创建菜单:

    1) 主要利用CMenu的三个成员函数CreateMenu、CreatePopupMenu、AppendMenu、SetMenu创建菜单;

    2) BOOL CMenu::CreateMenu();

         i. 该函数可以直接创建一个空的顶层菜单栏;

         ii. 返回值表示创建是否成功;

         iii. 该创建只是内存里的资源的创建,它在创建顶层菜单栏资源的同时将该资源与CMenu对象挂钩起来:

CMenu menuMain;
menuMain.CreateMenu(); // 创建了一个空的顶层菜单栏并将该资源和CMenu对象menuMain挂钩
    3) BOOL CMenu::CreatePopupMenu();

         i. 该函数也是创建一个菜单,返回值意义等也和CreateMenu一样;

         ii. 只不过该函数创建的是一个可弹出的顶层菜单项,同样也是空的,里面没有内容;

    4) BOOL CMenu::AppendMenu(UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL);

         i. 用于在菜单的末尾处添加一个菜单项;

         ii. nFlags:表示添加的项目的类型,以MF_前缀打头,即Menu Flag的缩写,主要有这几项:

MF_STRING:表示加入的是一个普通的具有命令的命令菜单项,此时第三个参数就是该惨淡项上的文本,而第二个参数就是该菜单项的ID;

MF_POPUP:表示加入的是一个顶层菜单项,此时第三个参数就表示该顶层菜单项的文本,但是要注意的是!第二个参数就变成了该顶层菜单项的句柄了!!但是由于第二个参数在原型中已经定义为了UINT型,所以还要对菜单句柄进行强制类型转换,转换成UINT型再传入;

MF_SEPARATOR:表示添加的是一条分界线,此时第二个参数和第三个参数就没意义了,直接取默认值0和NULL即可;


!!注意菜单资源的挂接和挂钩:

        a. 挂接是指将顶层菜单栏接在框架窗口上,以及将顶层菜单项接在顶层菜单栏上的过程;

        b. 挂钩:也叫绑定,在过去没有面向对象模式之前,菜单资源被创建在内存后特别不方便管理,需要用很多函数去维护,而现在有了CMenu类,就可以将原来一大堆的不方便全部都包装在CMenu对象中了,用户可以不必去面对这些底层的复杂性,因此就叫做菜单资源绑定在CMenu对象中,或者说是菜单资源和CMenu对象挂钩;

        c. 通常第一步都是创建资源并挂钩,然后顶层菜单栏通过SetMenu函数挂接到框架窗口上,而顶层菜单项通过AppendMenu挂接到顶层菜单栏中;

        d. 但是MFC存在一个大问题,那就是挂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值