MFC 菜单编程(CMenu)
2016-02-25 16:10
357 查看
#include "stdafx.h" #include "Menu.h" #include "MainFrm.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CMainFrame IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd) BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_WM_CREATE() ON_UPDATE_COMMAND_UI(IDM_CMDUI, OnUpdateCmdui) ON_COMMAND(IDM_SHOW, OnShow) ON_COMMAND (IDM_HELLO, OnHello) //}}AFX_MSG_MAP END_MESSAGE_MAP() static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; ///////////////////////////////////////////////////////////////////////////// // CMainFrame construction/destruction CMainFrame::CMainFrame() { // TODO: add member initialization code here m_bAutoMenuEnable = FALSE; } CMainFrame::~CMainFrame() { } int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbarn"); return -1; // fail to create } if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status barn"); return -1; // fail to create } // TODO: Delete these three lines if you don't want the toolbar to // be dockable m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); /*消息响应的顺序: 视图类---文档类---框架类---应用程序类*/ //给菜单项加上勾选标记 GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION | MF_CHECKED); GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_OPEN,MF_BYCOMMAND | MF_CHECKED); //设置默认菜单项,有且只能有一项,分隔栏算索引项 GetMenu()->GetSubMenu(0)->SetDefaultItem(2,TRUE); GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_SAVE_AS <a href="http://idlehandsdrygoods.com/">volcano electronic cigarettes</a>); //创建图形标记菜单 m_BitYes.LoadBitmap(IDB_CHECK_YES); m_BitNo.LoadBitmap(IDB_CHECK_NO); //状态栏 GetMenu()->GetSubMenu(2)->SetMenuItemBitmaps(1,MF_BYPOSITION,&m_BitYes,&m_BitNo); //禁用菜单项,必须在CMainFrame中关闭菜单命令更新机制。 //在框架类的构造函数中,使用m_bAutoMenuEnable = FALSE; GetMenu()->GetSubMenu(0)->EnableMenuItem(1,MF_BYPOSITION | MF_DISABLED | MF_GRAYED); //取消菜单 SetMenu(NULL); //加载菜单 CMenu menu; menu.LoadMenu(IDR_MAINFRAME); SetMenu(&menu); menu.Detach();//将菜单句柄和C++对象的联系断开,否则会有非法操作。 //在末尾插入新菜单 CMenu popmenu; popmenu.CreatePopupMenu(); GetMenu()->AppendMenu(MF_POPUP,(UINT)popmenu.m_hMenu,"插入新菜单"); popmenu.Detach(); //在已有菜单中插入菜单 CMenu instmenu; instmenu.CreatePopupMenu(); GetMenu()->InsertMenu(2,MF_BYPOSITION | MF_POPUP,(UINT)instmenu.m_hMenu,"插入已有菜单"); instmenu.AppendMenu(MF_STRING,IDM_HELLO,"HELLO"); instmenu.AppendMenu(MF_STRING,124,"新菜单项"); instmenu.AppendMenu(MF_STRING,125,"新菜单项"); //插入菜单项 GetMenu()->GetSubMenu(0)->AppendMenu(MF_STRING ,222,"插入菜单项"); GetMenu()->GetSubMenu(0)->InsertMenu(3,MF_BYPOSITION,(UINT)instmenu.m_hMenu,"插入菜单项"); //删除菜单 GetMenu()->DeleteMenu(1,MF_BYPOSITION); //删除菜单项 GetMenu()->GetSubMenu(0)->RemoveMenu(3,MF_BYPOSITION); instmenu.Detach(); return 0; } BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CMainFrame diagnostics #ifdef _DEBUG void CMainFrame::AssertValid() const { CFrameWnd::AssertValid(); } void CMainFrame::Dump(CDumpContext& dc) const { CFrameWnd::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CMainFrame message handlers //DEL void CMainFrame::OnTest() //DEL { //DEL // TODO: Add your command handler code here //DEL AfxMessageBox("主框架类"); //DEL //DEL } void CMainFrame::OnUpdateCmdui(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here pCmdUI->Enable(FALSE);//禁用菜单项 pCmdUI->SetCheck(1);//设置复选标记 pCmdUI->SetText("已经更改菜单");//更改菜单文本 pCmdUI->SetRadio(TRUE);//设置单选标记 } void CMainFrame::OnShow() { // TODO: Add your command handler code here MessageBox("框架类"); } void CMainFrame::OnHello() { MessageBox("CESHI"); }
相关文章推荐
- myeclipse常用快捷键
- Java计算器
- 今日分享一点干货。PHP中课程表的实现。
- Java代码注释XXX TODO FIXME 的意义
- C/C++基础::sizeof() 与 sizeof(string)
- Python——内建异常体系结构
- [C++11]_[初级]_[shared_ptr的使用场景]
- [C++11]_[初级]_[shared_ptr的简单使用]
- java,for穷举,经典题目:水仙花数
- JAVA常用集合框架用法详解——提高篇
- Java发送电子邮件
- java,循环语句,while语句
- C++ 拆分字符串
- No_16_0225 Java基础学习第六天
- Git使用教程(一)--搭建Github环境
- Java基础12 类型转换与多态
- metasploit模块功能介绍
- 使用Butter Knife 框架时报NullPointerException(Android studio或者IntelliJ IEDA开发,eclipse结构工程)
- Java基础11 对象引用
- Spring注解@Component、@Repository、@Service、@Controller