MFC CMenu类

      CMenu类的主要成员函数

       MFC为菜单的操作提供了CMenu类,下面鸡啄米就常用的几个成员函数进行简单的介绍。

       BOOL LoadMenu(UINT nIDResource);

       加载菜单资源,并将其附加到CMenu对象上。参数nIDResource指定了要加载的菜单资源的ID。如果菜单加载成功则返回TRUE,否则返回FALSE。

       BOOL DeleteMenu(UINT nPosition,UINT nFlags);

       在菜单中删除一个菜单项。参数nPosition指定要删除的菜单项。参数nFlags就用来解释nPosition的意义,为MF_BYCOMMAND时说明nPosition表示菜单项的ID,为MF_BYPOSITION时说明nPosition表示菜单项的位置,第一个菜单项的位置为0。如果删除菜单项成功则返回TRUE,否则返回FALSE。

       BOOL TrackPopupMenu(UINT nFlags,int x,int y,CWnd* pWnd,LPCRECT lpRect = 0);

       用来在指定位置显示一个浮动的弹出式菜单。参数nFlags指定屏幕坐标和鼠标位置的标志,可以是以下取值:

       TPM_CENTERALIGN:菜单在水平方向上相对于参数x指定的坐标值居中显示
       TPM_LEFTALIGN:菜单的左侧与参数x指定的坐标值对齐
       TPM_RIGHTALIGN:菜单的右侧与参数x指定的坐标值对齐
       TPM_BOTTOMALIGN:菜单的底部与参数y指定的坐标值对齐
       TPM_TOPALIGN:菜单项的顶部与参数y指定的坐标值对齐
       TPM_VCENTERALIGN:菜单在垂直方向上相对于参数y指定的坐标值居中显示

       这里先介绍这几个比较常用的,其他可参见MSDN。参数x指定弹出式菜单的水平方向的屏幕坐标,参数y指定菜单顶部垂直方向上的屏幕坐标,参数pWnd指明哪个窗口拥有此弹出式菜单,不能为NULL,参数lpRect忽略。

       UINT CheckMenuItem(UINT nIDCheckItem,UINT nCheck);

       在弹出菜单中为菜单项增加选中标记或移除选中标记。参数nIDCheckItem指定要选中或取消选中的菜单项。参数nCheck指定菜单项的选中状态和如何根据nIDCheckItem确定菜单项的位置,可以是MF_CHECKED或MF_UNCHECKED与MF_BYPOSITION或MF_BYCOMMAND的组合,这几个标志的含义如下:

       MF_BYCOMMAND:为默认值。说明参数nIDCheckItem表示菜单项的ID
       MF_BYPOSITION:说明参数nIDCheckItem表示菜单项的位置,第一个菜单项的位置是0
       MF_CHECKED:为菜单项添加选中标记
       MF_UNCHECKED:为菜单项移除选中标记

       该函数返回菜单项之前的状态:MF_CHECKED或MF_UNCHECKED, 如果菜单项不存在则返回0xFFFFFFFF。

       UINT EnableMenuItem(UINT nIDEnableItem,UINT nEnable);

       激活、禁用菜单项或使其变灰。参数nIDEnableItem指定要激活、禁用或变灰的菜单项。参数nEnable指定操作的类型,可以是MF_DISABLED、MF_ENABLED或MF_GRAYED与MF_BYCOMMAND或MF_BYPOSITION的组合,这些值的含义如下:

       MF_BYCOMMAND:同CheckMenuItem
       MF_BYPOSITION:同CheckMenuItem
       MF_DISABLED:禁用菜单项,使其不能被选择但不变灰
       MF_ENABLED:激活菜单项,使其能够被选择并由变灰状态恢复
       MF_GRAYED:禁用菜单项,使其不能被选择并变灰

       该函数返回菜单项之前的状态:MF_DISABLED、MF_ENABLED或MF_GRAYED

       CMenu* GetSubMenu(int nPos) const;

       获取弹出菜单的CMenu对象。参数nPos指定弹出菜单在菜单中的位置,不能使用ID。返回值是CMenu对象的指针,该CMenu对象的m_hMenu成员为由nPos指定的弹出菜单的句柄,如果不存在这样的CMenu对象则返回NULL,然后创建一个临时弹出菜单。

CMenu* GetMenu() const;

返回菜单指针。

BOOL SetDefaultItem( UINT uItem,BOOL fByPos = FALSE);

设置默认菜单项,fByPos = True时,uItem为菜单项位置索引。fByPos = False时,uItem为菜单项标示。

效果为菜单项加粗。

注意一个子菜单中只能设置一个默认菜单项,子菜单无法设置为默认菜单项。

BOOL SetMenuItemBitmaps(UINT nPosition, UINT nFlags, const CBitmap* pBmpUnchecked, const CBitmap* pBmpChecked)

nPosition的取值同样由nFlags来确定,后面两个参数为未被选中和被选中后的位图对象的指针。

创建之前同样和载入ICON一样需要创建CBitmap对象,并LoadBitmap来载入资源。如果CBitmap声明为局部变量,可以使用Detach来分离句柄和对象。

GetSystemMetrics(int nIndex)

两个参数SM_CYMENUCHECK或SM_CXMENUCHECK,分别对应获取图像X、Y轴上的长度。

       BOOL SetMenu(CMenu* pMenu);

若指针为NULL,则卸载现有菜单。否则加载pMenu指向的菜单对象。

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

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

这两个函数都可以用来添加菜单栏和菜单项,同样可以添加顶层菜单。

主要参数: MF_CHECKED  在菜单项前面放置一个对号。

MF_UNCHECKED 移除菜单项前面的对号标记。

MF_ENABLED 使菜单项可用。

MF_DISABLED 禁用菜单项

MF_CRAYED 禁用并加灰

MF_OWNERDRAW 表明菜单是一个自定义风格的菜单项

MF_POPUP 弹出菜单

MF_SEPARATOR 分隔栏项

MF_STRING 使用一个字符串标识该菜单项

BOOL DeleteMenu(UINT nPosition, UINT nFlags)

删除菜单项

菜单消息

       菜单主要能发送两种消息:COMMAND消息和UPDATE_COMMAND_UI消息。下面分别讲解:

       COMMAND消息:在菜单项被点击时发送该消息。

       UPDATE_COMMAND_UI消息:用来维护菜单项的各项状态,包括激活、禁用、变灰、选中、未选中等。在下拉菜单每次打开的时候,所有菜单项的此消息都会被发送出去。如果所属类中为菜单项的该消息添加了处理函数,则执行相应函数更新菜单状态。但是该函数不会再基于CDialog的MFC程序中被响应。


pCmdUI可以通过调用Enable()、SetText()等函数和m_Index、m_nID等变量来完成用户任务。

注意:分隔符也占一个索引,所以计算索引时一定要考虑到分隔符。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值