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>
范例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>
相关文章推荐
- ObjectiveC开发教程--字符串的连接
- 谈谈作为一个菜B的培训感受
- 【hdu】【Robberies】
- 并查集详解(转)
- 别董大
- 叠题乌江亭
- 谈谈作为一个菜B的培训感受
- 在 Linux 命令行中使用和执行 PHP 代码(一)
- 给树莓派系统添加看门狗程序
- LeetCode题解——Reverse Nodes in k-Group
- 剑指offer面试题12——打印1到最大的n位数
- hdoj-1757-A Simple Math Problem【矩阵的快速幂】
- 布局文件中tools:context的用途
- 静态成员变量和静态成员函数
- OCX和DLL的区别
- 题乌江亭
- JSON——李炎灰js笔记
- iOS--RunLoop原理介绍
- 获取iOS设备唯一标识
- 新建一个TEMP02作为默认表空间,然后删除之前的表空间