zoukankan      html  css  js  c++  java
  • VC++ 创建一个动态增长的层叠菜单

        工作中需要创建一个动态增长的层叠菜单,类似于动态增长的多语言切换菜单,也是废了好大劲哪,分享一下,请交流参考。

        类似效果图:

        

        弹出子菜单各菜单项的意义一致,用ON_COMMAND_RANGE宏来统一实现消息映射。

        首先是弹出子菜单的创建:  

        CMenu subMenu;             
        subMenu.CreatePopupMenu(); 
        for (int i = 0; i < m_aLanguages.GetSize(); i++)
        {
             subMenu.AppendMenu(MF_STRING, ID_LANGUAGE_FIRST + i, GetLanguageName(m_aLanguages[i]) );
        }
        CString menustr(_T("Language"));
        popMenu.AppendMenu(MF_POPUP, (UINT)subMenu.m_hMenu, menustr); 
        

          DWORD pos = GetMessagePos();
          CPoint pt(LOWORD(pos), HIWORD(pos));
          popMenu.TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON, pt.x, pt.y, AfxGetMainWnd());

        m_aLanguages是已知的语言ID Array, GetLanguageName函数可以获取对应语言ID的语言名称,ID_LANGUAGE_FIRST是语言菜单项起始ID。
        
        其次是菜单消息映射实现:
        afx_msg void OnLanguage(UINT nId);
    
        ON_COMMAND_RANGE(ID_LANGUAGE_FIRST, ID_LANGUAGE_LAST, OnLanguage)
    
        void CMainFrame::OnLanguage(UINT nId)
        {
              UINT nCurSelID = nID - ID_LANGUAGE_FIRST;
              // Do something ......        
        }

        注意:ON_COMMAND_RANGE消息映射函数的参数是nId,而不是wParam、lParam。

  • 相关阅读:
    Learning Spark中文版--第三章--RDD编程(1)
    关于learning Spark中文版翻译
    dom4j 常用操作
    Invalid bound statement (not found)
    touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied
    docker 运行tomcat 并部署 java web项目
    docker build no such file or directory
    Docker 笔记
    java 自动拆箱 自动装箱
    Ubuntu18 中文乱码 问题 解决
  • 原文地址:https://www.cnblogs.com/MakeView660/p/6688658.html
Copyright © 2011-2022 走看看