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。

  • 相关阅读:
    SEO优化---学会建立高转化率的网站关键词库
    从一个程序员的角度看——微信小应用
    当AngularJS POST方法碰上PHP
    angularJS(6)
    彻底解决显示Opencv中Mat图像到Mfc窗口问题
    数据结构与算法基础总结
    java类别问题
    java基础知识
    逻辑地址、线性地址、物理地址和虚拟地址的区别
    TCP协议中的三次握手和四次挥手(图解)
  • 原文地址:https://www.cnblogs.com/MakeView660/p/6688658.html
Copyright © 2011-2022 走看看