玩转C科技.NET

从学会做人开始认识这个世界!http://tinyurl.com/volnet http://bit.ly/KMzi2

导航

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

统计

公告

Microsoft MVP!
2008.10-2010.10
Subscribe to this feed
Contact volnet online!

MSN群MyMSDN技术讨论群
群号:www.msdn@hotmail.com
Windows Live Alerts
LiveMessenger:
<My Library>

昵称:volnet(可以叫我大V)
园龄:7年3个月
粉丝:26
关注:10

搜索

 

常用链接

最新随笔

我的标签

随笔分类(182)

随笔档案(161)

文章分类(15)

文章档案(15)

相册

家园建设

积分与排名

  • 积分 - 238739
  • 排名 - 333

最新评论

阅读排行榜

评论排行榜

推荐排行榜

Menu-静态菜单和动态菜单

1、 静态菜单

CMainFrame::OnCreate中添加以下代码。

     /*TODO:将子菜单中的某一菜单项选中

     CWnd::GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED);

     GetMenu()获取菜单

     GetSubMenu(0)获取子菜单

     CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED);

     按索引访问,索引为0,按位置访问MF_BYPOSITION,并加上标记MF_CHECKED

     ID访问,IDID号,按位置访问MF_BYCOMMAND,并加上标记MF_CHECKED

     */

     //GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED);

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

 

     /*TODO:缺省菜单项,即某一子菜单以粗体的形式显示

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

     If this parameter(fByPos) is FALSE, uItem is a menu item identifier. Otherwise, it is a menu item position.

     如果为FALSE的时候FALSE也可以不写,因为缺省值就是FALSE

     另外:在一个子菜单中只能有一个缺省菜单,如果设置多个,则以后一个为缺省菜单

     子菜单中计算索引值的时候也应该包括分隔符

     */

     //GetMenu()->GetSubMenu (0)->SetDefaultItem (1,TRUE);

     //GetMenu()->GetSubMenu (0)->SetDefaultItem (ID_FILE_OPEN,FALSE);

     //GetMenu()->GetSubMenu (0)->SetDefaultItem (ID_FILE_OPEN);

 

     /*TODO:为菜单项添加图形标记,也就是在标签前加一个位图。

         此处必须注意:对菜单位图是有大小要求的。在不知道的情况下可以通过编程来获得。

              //以下代码用来获得系统菜单MENUCHECK的高和宽

              CString str;

              str.Format("x=%d,y=%d",GetSystemMetrics(SM_CXMENUCHECK)

                   ,GetSystemMetrics(SM_CYMENUCHECK));

              MessageBox(str);

     */

     //m_bitmap.LoadBitmap (IDB_BITMAP1);

     //GetMenu()->GetSubMenu (0)->SetMenuItemBitmaps(2,MF_BYPOSITION,&m_bitmap,&m_bitmap);

 

     /*让一个菜单生效或屏蔽它

         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.

     因此在MainFrame()构造函数中要让m_bAutoMenuEnable=FALSE;才可以让手动修改生效。

     */

     //GetMenu()->GetSubMenu(0)->EnableMenuItem(3,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);

    

     /*TODO:隐藏/显示菜单。

     */

     //SetMenu(NULL);   //隐藏菜单。

     //以下显示菜单:

     //CMenu menu;

     //menu.LoadMenu(IDR_MAINFRAME);

     //SetMenu(&menu);

     //menu.Detach();   //必须调用此方法以保证在调用完菜单后将其与当前句柄脱离,其将在WINDOWS销毁的时候一起销毁。

2、 动态菜单

/*   CMenu menu;

     menu.CreatePopupMenu(); //插入一个弹出菜单

//   GetMenu()->AppendMenu(MF_POPUP,(UINT)menu.m_hMenu,"WinSun");

/* CMenu::AppendMenu

Appends a new item to the end of a menu.

BOOL AppendMenu(

   UINT nFlags,

   UINT_PTR nIDNewItem = 0,

   LPCTSTR lpszNewItem = NULL

);

BOOL AppendMenu(

   UINT nFlags,

   UINT_PTR nIDNewItem,

   const CBitmap* pBmp

);

*/

     GetMenu()->InsertMenu(2,MF_BYPOSITION | MF_POPUP,(UINT)menu.m_hMenu,"WinSun");

/* CMenu::InsertMenu

Inserts a new menu item at the position specified by nPosition and moves other items down the menu.

BOOL InsertMenu(

   UINT nPosition,

   UINT nFlags,

   UINT_PTR nIDNewItem = 0,

   LPCTSTR lpszNewItem = NULL

);

BOOL InsertMenu(

   UINT nPosition,

   UINT nFlags,

   UINT_PTR nIDNewItem,

   const CBitmap* pBmp

);

*/

     menu.AppendMenu(MF_STRING,IDM_HELLO,"Hello");

     menu.AppendMenu(MF_STRING,112,"Weixin");

     menu.AppendMenu(MF_STRING,113,"Mybole");

     menu.Detach();

     GetMenu()->GetSubMenu(0)->AppendMenu(MF_STRING,114,"Welcome");

     GetMenu()->GetSubMenu(0)->InsertMenu(ID_FILE_OPEN,

              MF_BYCOMMAND | MF_STRING,115,"维新");

     GetMenu()->DeleteMenu(1,MF_BYPOSITION);

     GetMenu()->GetSubMenu(0)->DeleteMenu(2,MF_BYPOSITION);*/

 

代码下载:code_Menu

posted on 2008-07-18 20:12 volnet(可以叫我大V) 阅读(952) 评论(2)  编辑 收藏

评论

#1楼 2009-09-23 15:35 小芊      

可以联系一下吗? 我有一个MFC菜单的问题 我都困惑了两天了
可以帮帮我吗? 我在网上找了好多资料 也没有找到
 回复 引用 查看   

#2楼[楼主] 2009-09-24 08:52 volnet(可以叫我大V)      

@小芊
您好,请问如何联系?
 回复 引用 查看   

发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 472797 V0lW4UgYIJ4=
使用Live Messenger联系我
关闭