2.1 如何动态添加和删除菜单项

  1. AppendMenu
  2. InsertMenu
  3. DeleteMenu
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
void CMainFrame::OnAppendMenu()
{
//获得主菜单
CMenu* pMenu = GetMenu();
//获得子菜单
CMenu* pSubMenu = pMenu->GetSubMenu(4); if (pSubMenu->GetMenuItemCount() == 4)
{
//在菜单末端添加菜单项
pSubMenu->AppendMenu(MF_STRING, ID_TEST_MENU, _T("新菜单项")); //重画菜单
DrawMenuBar();
}
} void CMainFrame::OnInsertMenu()
{
//获得主菜单
CMenu* pMenu = GetMenu();
//获得子菜单
CMenu* pSubMenu = pMenu->GetSubMenu(4); if (pSubMenu->GetMenuItemCount() == 4)
{
//在菜单指定位置添加菜单项
pSubMenu->InsertMenu(4, MF_BYPOSITION, ID_TEST_MENU, _T("新菜单项")); //重画菜单
DrawMenuBar();
}
} void CMainFrame::OnRemoveMenu()
{
//获得主菜单
CMenu* pMenu = GetMenu();
//获得子菜单
CMenu* pSubMenu = pMenu->GetSubMenu(4); if (pSubMenu->GetMenuItemCount() == 5)
{
//删除菜单项
pSubMenu->RemoveMenu(4, MF_BYPOSITION); //重画菜单
DrawMenuBar();
}
} void CMainFrame::OnDeleteMenu()
{
//获得主菜单
CMenu* pMenu = GetMenu();
//获得子菜单
CMenu* pSubMenu = pMenu->GetSubMenu(4); if (pSubMenu->GetMenuItemCount() == 5)
{
//删除菜单项
pSubMenu->DeleteMenu(4, MF_BYPOSITION); //重画菜单
DrawMenuBar();
}
} void CMainFrame::OnTestMenu()
{
AfxMessageBox(_T("测试菜单项命令"));
}

2.2 如何在系统菜单中添加菜单项

  1. GetSystemMenu
//获得系统菜单
CMenu* pMenu = GetSystemMenu(FALSE); //删除系统菜单项
pMenu->RemoveMenu(SC_MOVE, MF_STRING); //添加菜单项
pMenu->InsertMenu(0, MF_BYPOSITION, ID_TEST_MENU, _T("测试菜单项")); //重画菜单
DrawMenuBar();

2.3 如何禁用关闭按钮

  1. EnableMenuItem
//获得系统菜单
CMenu* pMenu = GetSystemMenu(FALSE); //禁用关闭按钮
pMenu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);

2.4 如何启用和禁用菜单项

CCmdUI的Enable方法

void CMainFrame::OnTestMenu1()
{
m_bEnable1 = FALSE;
m_bEnable2 = TRUE;
} void CMainFrame::OnUpdateTestMenu1(CCmdUI* pCmdUI)
{
//启用或禁用菜单1
pCmdUI->Enable(m_bEnable1);
} void CMainFrame::OnTestMenu2()
{
m_bEnable1 = TRUE;
m_bEnable2 = FALSE;
} void CMainFrame::OnUpdateTestMenu2(CCmdUI* pCmdUI)
{
//启用或禁用菜单2
pCmdUI->Enable(m_bEnable2);
}

2.5 如何设置菜单项的检查状态

SetCheck方法

void CMainFrame::OnUpdateTestMenu(CCmdUI* pCmdUI)
{
//设置菜单项检查状态
pCmdUI->SetCheck(m_nCheck);
}

2.6 如何实现快捷菜单

即右键菜单ContextMenu

void CDemoView::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu menu; //加载菜单
if (!menu.LoadMenu(IDR_MENU))
{
return;
} //获得子菜单
CMenu* pPopupMenu = menu.GetSubMenu(0); //弹出菜单
pPopupMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
point.x, point.y, pWnd);
} void CDemoView::OnTestMenu1()
{
AfxMessageBox(_T("快捷菜单项1命令"));
} void CDemoView::OnTestMenu2()
{
AfxMessageBox(_T("快捷菜单项2命令"));
}

VC++菜单的更多相关文章

  1. VC 菜单前的勾的切换

    if (pMenu->GetSubMenu(2)->GetMenuState(ID_STOP_SPOT_OP_MOSUE,MF_BYCOMMAND) == MF_UNCHECKED) { ...

  2. VC error LNK2005 解决办法

    error LNK2005: "int __cdecl VerifyVMR9(void)" (?VerifyVMR9@@YAHXZ) 解决办法 在 属性->配置属性-> ...

  3. VC 6.0 LNK2005 错误 处理

    造成LNK2005错误主要有以下几种情况: 1.重复定义全局变量.可能存在两种情况: A.对于一些初学编程的程序员,有时候会以为需要使用全局变量的地方就可以使用定义申明一下.其实这是错误的,全局变量是 ...

  4. 定位vc运行时库问题 依赖问题,屡试不爽的一招

    用vc 菜单 文件| 打开|指定EXE或DLL,如有指定运行时库,则PE文件的资源中可以看到manifest 配置节 然后据此判断EXE依赖的运行时库, 再根据编译选项调整 运行时库设置

  5. vc++远程调试工具

    简单来说: 1>在远程机器跑VC自带的远程调试工具msvsmon.exe,并把要调试的程序跑起来 2>用VC调试器附加进程,即可调试 先展开来说: VC8,VC9都自带远程调试工具,可以在 ...

  6. C++内存问题大集合(指针问题,以及字符串拷贝问题,确实挺危险的)

    作者:rendao.org,版权声明,转载必须征得同意. 内存越界,变量被篡改 memset时长度参数超出了数组长度,但memset当时并不会报错,而是操作了不应该操作的内存,导致变量被无端篡改 还可 ...

  7. compile,build和execute的区别

    一个c程序的生成要经历以下步骤: 1.编写文本代码,生成c或cpp文件,这时候它还是文本的: 2.编译,就是compile,由c编译程序对你写的代码进行词法和句法分析,发现并报告错误,有错时编译不能通 ...

  8. error:LNK2005 已经在*.obj中定义

    为什么会出现这个错误??“error LNK2005: 已经在*.obj中定义”  编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误,弄清楚它形成的原 ...

  9. 如何往IE工具条添加按钮(转载)

    如何往IE工具条添加按钮 问题提出:金山词霸.网络蚂蚁等软件安装后会向IE的工具条添加自己的按钮.按下按钮后还会作出相应的动作,这种功能是如何实现的呢?读完本文,您也可以将自己应用程序的按钮添加到IE ...

随机推荐

  1. spring 两个 properties

    A模块和B模块都分别拥有自己的Spring XML配置,并分别拥有自己的配置文件: A模块 A模块的Spring配置文件如下: <?xml version="1.0" enc ...

  2. javascript设计模式--状态模式(State)

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. vi/vim使用指北 ---- Beyond the Basic

    更多的组合命令 [number]-[command]-[test object] number:   数字 comand:  c,d,y  (修改,删除,复制) test object: 移动光标的命 ...

  4. Javascript 正则表达式_4

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  5. Android——横屏和竖屏的切换,以及明文密码的显示

    查看API文档: android.content.pm.ActivityInfo    在手机的使用中,我们要根据不同的需求来改变屏幕的显示方向,一般在浏览信息时是竖屏,在玩游戏的时候就要切换到横屏. ...

  6. java 以及 vs 的快捷键

    javactrl+shift+y 小写ctrl+shift+x 大写ctrl+shift+f 格式化代码 vsctrl+u 小写ctrl+shift+u 大写ctrl+k+f 格式化代码

  7. ***PHP implode() 函数,将数组合并为字符串;explode() 函数,把字符串打散为数组

    实例 把数组元素组合为字符串: <?php $arr = array('Hello','World!','I','love','Shanghai!'); echo implode(" ...

  8. Win32应用程序中文支持

    Settings--Editor---Encoding改为Windows 936 main.cpp中#include "locale.h" winmain中增加一行: setloc ...

  9. 2014多校第五场1010 || HDU 4920 Matrix multiplication(矩阵乘法优化)

    题目链接 题意 : 给你两个n*n的矩阵,然后两个相乘得出结果是多少. 思路 :一开始因为知道会超时所以没敢用最普通的方法做,所以一直在想要怎么处理,没想到鹏哥告诉我们后台数据是随机跑的,所以极端数据 ...

  10. CamShift算法

    拟采用的方法,CamShift算法,即"Continuously Apative Mean-Shift"算法,是一种运动跟踪算法.它主要通过视频图像中运动物体的颜色信息来达到跟踪的 ...