• 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。

  • 相关阅读:
    安装 android sdk 时,dl.google.com 连不上各种尝试
    解决android SDK 安装过程中 packages 列表为空的问题
    Java 集合 -- Deque
    Java 集合 -- Queue
    Java 集合 -- Set
    Java 集合 -- Map
    Java 集合 -- List
    Java 语言进阶 -- 线程
    Java 语言基础知识
    Java 网络编程基础 -- TCP 编程
  • 原文地址:https://www.cnblogs.com/MakeView660/p/6688658.html
Copyright © 2020-2023  润新知