您的位置:首页 > 其它

CMenu

2015-07-29 10:19 267 查看
///////////////////////////////////////////////////////////////////////////

范例1. 菜单文本修改
范例2. 单文档中将系统菜单栏替换为自己建立的菜单栏
范例3. 如何用VC++
动态修改应用程序菜单(
如何实现找到一个菜单项

///////////////////////////////////////////////////////////////////////////
 范例1.
菜单文本修改

(1)

CMenu* pMenu= AfxGetMainWnd()->GetMenu();
if (pMenu)
{
         //修改菜单项 

pMenu->ModifyMenuW(ID_FILE_OPEN, MF_BYCOMMAND, ID_FILE_OPEN,_T("hello"));
}

(2)

标题:(来自网络) 修改菜单标题

我改成这样就可以了
menu-> ModifyMenu(0, MF_BYPOSITION, 2,"文件");
menu-> ModifyMenu(1, MF_BYPOSITION, 2,"编辑");
menu-> ModifyMenu(2, MF_BYPOSITION, 2,"工具");
为什么是2就不清楚了 等高手来解释
最后要加上 DrawMenuBar();要不然鼠标放上去才更新

范例2. 单文档中将系统菜单栏替换为自己建立的菜单栏

在我们基于单文档编程的过程中,往往不需要系统自己定义的菜单栏,想自己设定自己需要的菜单栏,因此就需要修改某些参数实现该功能。

方法一:

1、建立好基于单文档工程,在资源中建立自己的菜单栏:IDR_MYMENU;

2、在CXXApp中的InitInstance()做如下修改:

CSingleDocTemplate* pDocTemplate;

pDocTemplate = new CSingleDocTemplate(

IDR_MYMENU,        
             //在此处将系统的IDR_MAINFRAME改为:IDR_MYMENU

RUNTIME_CLASS(CVIEWDoc),

RUNTIME_CLASS(CMainFrame),
      // main SDI frame window

RUNTIME_CLASS(CVIEWView));
AddDocTemplate(pDocTemplate);

方法二(孙鑫老师第六课):

1、建立好基于单文档工程,在资源中建立自己的菜单栏:IDR_MYMENU;

2、在OnCreate(...)函数中添加如下代码:

......
//去掉系统的菜单
SetMenu(NULL);
//添加自己的菜单
CMenu menu;
menu.LoadMenu(IDR_MYMENU);  //加载自己的菜单
SetMenu(&menu); 
menu.Detach();   //该函数是用来将菜单句柄与菜单对象分离

return 0;

范例3. 

[问题提出]

  本文将介绍一些使用CMenu的方法,如查找指定菜单,在指定选项前添加菜单项.....

 [解决方法]

  使用CWnd::GetMenu( )访问主菜单,GetMenu( )返回指向CMenu对象的指针,它有一些成员函数,允许我们修改一个菜单。

  1) 如何实现找到一个菜单项:

  步骤如下:

  {

     //动态修改菜单:

     // Get the Main Menu

     CMenu* pMainMenu = AfxGetMainWnd()->GetMenu();

     CMenu* pSubMenu = NULL;

     int i;

     for (i=0; i<(int)pMainMenu->GetMenuItemCount(); i++)

     {

      pSubMenu = pMainMenu->GetSubMenu(i);

      if (pSubMenu && pSubMenu->GetMenuItemID(0) == ID_FILE_NEW)

        break;

     }

     CString s;

     s.Format("%d",i);//菜单项的位数.

     AfxMessageBox(s);

     ASSERT(pSubMenu);

  }

  2) 动态编辑菜单:

  步骤如下(可以用上例的pSubMenu,要加的菜单你自己定义.):

  1) 添加一个称为Wzd2,命令ID为IDC_NAME_NEW1的菜单命令到该菜单中,可以用:

     pSubMenu->AppendMenu(0,IDC_NAME_NEW1,"New&1");

  2) 在New1前插入New2,可以用:

     pSubMenu->InsertMenu(IDC_NAME_NEW1,MF_BYCOMMAND,IDC_NAME_NEW2, "New&2");

  3) 把New1改变成New3,可以用:

     pSubMenu->ModifyMenu(IDC_NAME_NEW1,MF_BYCOMMAND,IDC_NAME_NEW3, "New&3");

  4) 删除该菜单中第二项,可以用:

     pSubMenu->RemoveMenu(1,MF_BYPOSITION);

来源: <http://www.cppblog.com/finehai/archive/2009/07/20/90586.html>
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: