注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

hhfighting的博客

以责人之心责己,以恕己之心恕人

 
 
 

日志

 
 
 
 

mfc中菜单相关知识  

2010-11-17 13:58:38|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 这里主要介绍菜单相关的几个函数。

HMENU GetMenu()

参考:函数功能:该函数取得分配给指定窗口的菜单的句柄。

          函数原型:HMENU GetMenu(HWND hWnd);

          参数:       hWnd:其菜单句柄被取得的窗口的句柄。

          返回值:返回值是菜单的句柄。如果给定的窗口没有菜单,则返回NULL。如果窗口是一个子窗口,返回值无定义.

CMenu* GetSubMenu( int nPos ) const;

  返回值:

  若弹出菜单位于指定的位置,则返回CMenu 对象的指针,其中CMenu对象要包含弹出菜单的句柄;否则为NULL。如果CMenu 对象不存在,那么将创建临时的CMenu 对象。但返回的CMenu指针不应被存储。

DWORD CheckMenuItem(HMENU hmenu, UINT uIDCheckItem, UINT uCheck); 

  参数:

  hmenu:含有其菜单项的标志将被提取得的菜单的句柄。

  uIDCheckItem:制定要修改的菜单项。

  uCheck:表示标记的状态。此参数可取下列值之一:

  MF_BYCOMMAND:表示参数uId给出菜单项的标识符。如果MF_BYCOMMAND和MF_BYPOSITION都没被指定,则MF_BYCOMMAND是缺省值。

  MF_BYPOSITION:表示参数uId给出菜单项相对于零的位置。

  返回值:如果指定的项不存在,返回值是OXFFFFFFFF;如果菜单项打开了一个子菜单,则返回值的低位含有与菜单相联系的菜单标志,高位含有子菜单的项数。否则,返回值是莱单标志的掩码(布尔OR)。

  下面列出与菜单项相关的菜单标志。

  MF_CHECKED:放置选取标记于菜单项旁边(只用于下拉式菜单、子菜单或快捷菜单)。

  MF_DISABLED:使菜单项无效。MF_GRAYED:使菜单项无效并交灰。MF_HILITE:加亮菜单项。

  MF_MENUBARBREAK:对下拉式菜单、子菜单和快捷菜单,新列和旧列由垂直线隔开,其余功能同MF_MENUBREAK标志。

  MF_MENUBREAK:将菜单项放于新行(对菜单条)或无分隔列地放于新列(对下拉式菜单、子菜单或快捷菜单)。

  MF_SEPARATOR:创建一个水平分隔线(只用于下拉式菜单、子菜单或快捷菜单)。

 

 语句实例:GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION | MF_CHECKED);

                  GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND | MF_CHECKED);

SetDefaultItem()  设置缺省项

               GetMenu()->GetSubMenu(0)->SetDefaultItem(1,TRUE);  相对位置方式

              GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_OPEN,FALSE); 参数默认为FALSE

一个子菜单只能有一项缺省

BOOL SetMenuItemBitmaps 创建图形标记菜单

GetSystemMetrics     用于得到被定义的系统数据或者系统配置信息,项目较多参看MSDN

BOOL EnableMenuItem(HMENU hMenu,UINT uIDEnableItem, UINT uEnable);

       允许或禁止指定的菜单条目

  返回值 : BOOL 判断是否成功

  参数表 :

  参数 类型及说明

  hMenu ,菜单句柄

  wIDEnableItem ,欲允许或禁止的一个菜单条目的标识符。如果在wEnable参数中设置了MF_BYCOMMAND标志,这个参数就代表欲改变菜单条目的命令ID。如设置的是MF_BYPOSITION,则这个参数代表菜单条目在菜单中的位置(第一个条目肯定是零)

  wEnable ,参考ModifyMenu函数中的菜单常数标志定义表,其中列出了允许使用的所有常数。

 

引自MSDN特别注意:NOTE: m_bAutoMenuEnable is set to FALSE in the constructor of
                                  CMainFrame so no ON_UPDATE_COMMAND_UI or ON_COMMAND handlers are 
                                  needed, and CMenu::EnableMenuItem() will work as expected

 BOOL SetMenu( CMenu* pMenu );

  返回值:如果菜单发生了变化,则返回非零值;否则返回0。

  参数:

pMenu标识了新的菜单。如果这个参数为NULL,则当前菜单被清除。

 

  说明:

  这个函数将当前菜单设为指定的菜单。它使窗口被重画以反映菜单的变化。

  SetMenu不会销毁以前的菜单。应用程序必须调用CMenu::DestroyMenu成员函数以完成这个任务。

GetMenu()->GetSubMenu(0)->EnableMenuItem(1,MF_BYPOSITION | MF_DISABLED | MF_GRAYED);
    SetMenu(NULL);
 CMenu menu;
 menu.LoadMenuW(IDR_MAINFRAME);
 SetMenu(&menu);
 menu.Detach();  断开联系 避免析构

  评论这张
 
阅读(147)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018