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。

  • 相关阅读:
    BZOJ 1002 轮状病毒
    poj_1952最大下降子序列,统计个数
    poj_3468线段树成段更新求区间和
    hdu_4707
    uva_644暴力加字典树解法
    正则表达式:处理文本内容中特定的字符串
    grep:文本搜索工具
    分析文本的工具:wc,sort,uniq,diff和patch
    按列抽取文本cut和合并文件paste
    显示文本前或后行内容:head,tail
  • 原文地址:https://www.cnblogs.com/MakeView660/p/6688658.html
Copyright © 2011-2022 走看看