zoukankan      html  css  js  c++  java
  • MFC学习笔记5 单文档菜单

    一。消息分类

    • 命令消息:WM_COMMOND 菜单处理函数
    • 标准消息:view->属性->消息
    • 通告消息:控件处理函数

    二。菜单操作

    在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中进行菜单操作

     1     //标志
     2     //获取菜单
     3     //或者主菜单
     4     CMenu* menu = GetMenu(); 
     5     //获取第一个子菜单
     6     CMenu* fileMenu = menu->GetSubMenu(0); 
     7     //标记“新建”,第一个若下标,则MF_BYPOSITION
     8     fileMenu->CheckMenuItem(0, MF_BYPOSITION | MF_CHECKED);
     9     //标记“打开”,第一个若ID,则MF_BYCOMMAND
    10     fileMenu->CheckMenuItem(ID_FILE_OPEN, MF_BYCOMMAND | MF_CHECKED);
    11 
    12     //设置默认项,加粗,一个菜单只有一个默认项
    13     //FALSE:ID
    14     //TRUE:位置
    15     fileMenu->SetDefaultItem(ID_FILE_SAVE, FALSE);
    16     //变灰
    17     //需要CFrameWnd::m_bAutoMenuEnable = FALSE;
    18     fileMenu->EnableMenuItem(5, MF_BYPOSITION | MF_DISABLED);
    19     
    20     //移除菜单
    21     SetMenu(NULL);
    22 
    23     //加载菜单
    24     CMenu menu2;
    25     menu2.LoadMenuW(IDR_MENU1);
    26     SetMenu(&menu2);
    27     //分离
    28     menu2.Detach();    

    点击B,更新A是否高亮显示

    1.为A添加事件处理函数

    //菜单更新是自动更新的,通过标志位
    void CMainFrame::OnUpdateA(CCmdUI* pCmdUI)
    {
        // TODO: 在此添加命令更新用户界面处理程序代码
        if (m_isUpdate == TRUE)
        {
            pCmdUI->Enable(TRUE);
        }
        else {
            pCmdUI->Enable(FALSE);
        }
    }

    2.B添加事件处理函数

    1 void CMainFrame::OnB()
    2 {
    3     // TODO: 在此添加命令处理程序代码
    4     m_isUpdate = !m_isUpdate;  //点击更新标志位
    5 }

     

    三。左键弹出菜单

     1 void CMenuView::OnLButtonDown(UINT nFlags, CPoint point)
     2 {
     3     // TODO: 在此添加消息处理程序代码和/或调用默认值
     4 
     5     //创建菜单项
     6     CMenu menu;
     7     menu.LoadMenuW(IDR_MENU1);
     8     //获取第一个子菜单
     9     CMenu* subMenu = menu.GetSubMenu(0);
    10 
    11     //坐标转换
    12     ClientToScreen(&point); 
    13     //子菜单作为快捷菜单,右击菜单
    14     subMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON,
    15         point.x, point.y, this);
    16     
    17     CView::OnLButtonDown(nFlags, point);
    18 }

     

    四。动态更新窗口图标

    1.首先在资源中导入图标ico,在class CMainFrame : public CFrameWnd中添加图标数组

     

    2.在OnCreate中创建定时器,并生成处理函数

     

     1 void CMainFrame::OnTimer(UINT_PTR nIDEvent)
     2 {
     3     // TODO: 在此添加消息处理程序代码和/或调用默认值
     4     static int i = 0;
     5     //修改标题
     6     SetClassLong(m_hWnd, GCL_HICON, (LONG)icon[i]);
     7     i++;
     8     if (i == 4)
     9         i = 0;
    10     CFrameWnd::OnTimer(nIDEvent);
    11 }
  • 相关阅读:
    Java --关于线程池的理解Executors.newFixedThreadPool(int n)
    有参数返回的Lambda
    vuejs经验交流之-开发环境和生产环境的启动
    vuejs经验交流之-安装(NPM)
    vuejs经验交流之-form表单校验
    Vue.js简介
    vuejs经验交流之-components(组件)
    vuejs经验交流之-图片上传
    vuejs经验交流之-watch 深度监测
    setTimeout(), clearTimeout()
  • 原文地址:https://www.cnblogs.com/sclu/p/11571469.html
Copyright © 2011-2022 走看看