1 #pragma once 2 #include "IconMgr.h" 3 4 class MenuMgr 5 { 6 public: 7 MenuMgr(); 8 virtual ~MenuMgr(); 9 10 HBITMAP GetMenuBitmapHandle(IconMgr::IconType icon_type); 11 const CBitmap* GetMenuBitmap(IconMgr::IconType icon_type); 12 private: 13 std::map<HICON, CBitmap> m_icon_bitmap_map; 14 15 public: 16 enum MenuType 17 { 18 MainPopupMenu, // 主窗口(弹出菜单ver)(shift+右键) 19 MainMenu, // 主窗口 20 MainFileMenu, // 主窗口->子菜单"文件" 21 MainPlayCtrlMenu, // 主窗口->子菜单"播放控制" 22 MainPlayCtrlRepeatModeMenu, // 主窗口->子菜单"播放控制"->子菜单"循环模式" 23 MainPlayCtrlAbRepeatMenu, // 主窗口->子菜单"播放控制"->子菜单"AB重复" 24 MainPlaylistMenu, // 主窗口->子菜单"播放列表" 25 MainPlaylistAddMenu, // 主窗口->子菜单"播放列表"->子菜单"添加" 播放列表工具栏->添加(0) 26 MainPlaylistDelMenu, // 主窗口->子菜单"播放列表"->子菜单"删除" 播放列表工具栏->删除(1) 27 MainPlaylistSortMenu, // 主窗口->子菜单"播放列表"->子菜单"排序方式" 播放列表工具栏->排序(2) 28 MainPlaylistDispModeMenu, // 主窗口->子菜单"播放列表"->子菜单"播放列表显示方式" 29 MainLyricMenu, // 主窗口->子菜单"歌词" 30 MainLrcChConvMenu, // 主窗口->子菜单"歌词"->子菜单"繁简转换" 31 MainLrcInnerLrcMenu, // 主窗口->子菜单"歌词"->子菜单"内嵌歌词" 32 MainViewMenu, // 主窗口->子菜单"视图" 33 MainViewSwitchUiMenu, // 主窗口->子菜单"视图"->子菜单"切换界面" 34 MainToolMenu, // 主窗口->子菜单"工具" 35 MainToolCreateShortcutMenu, // 主窗口->子菜单"工具"->子菜单"创建快捷方式" 36 MainToolAlbumCoverMenu, // 主窗口->子菜单"工具"->子菜单"专辑封面" 37 MainToolDelCurPlayingMenu, // 主窗口->子菜单"工具"->子菜单"删除正在播放的曲目" 38 MainHelpMenu, // 主窗口->子菜单"帮助" 39 40 PlaylistToolBarMenu, // 播放列表工具栏(弹出菜单) 41 PlaylistToolBarListMenu, // 播放列表工具栏->列表(3) 42 PlaylistToolBarEditMenu, // 播放列表工具栏->编辑(4) 43 PlaylistToolBarFolderMenu, // 播放列表工具栏->文件夹(5) 44 45 MainAreaMenu, // 主界面区域菜单 46 MainAreaLrcMenu, // 主界面歌词区域菜单(与MainLyricMenu共用翻译) 47 MainAreaPlaylistBtnMenu, // 主界面播放列表按钮 48 DlrcMenu, // 桌面歌词窗口 49 DlrcDefMenu, // 桌面歌词窗口->子菜单"预设方案" 50 RecentFolderPlaylistMenu, // MenuEditCtrl控件(最近播放文件夹/播放列表) 51 PlaylistMenu, // 播放列表菜单 52 RateMenu, // "分级"菜单 53 AddToPlaylistMenu, // "添加到播放列表"菜单 54 55 MiniAreaMenu, // 迷你模式区域菜单 56 MiniModeSwitchUiMenu, // 迷你模式切换界面菜单 57 NotifyMenu, // 系统托盘图标 58 59 LibSetPathMenu, // 媒体库文件夹标签页菜单 60 LibPlaylistMenu, // 媒体库播放列表标签页菜单 61 LibLeftMenu, // 媒体库左侧菜单 62 LibRightMenu, // 媒体库右侧菜单 63 LibPlaylistRightMenu, // 媒体库播放列表右侧菜单 64 LibFolderExploreMenu, // 媒体库中文件夹浏览左侧菜单 65 UiLibLeftMenu, // UI中媒体库列表菜单 66 UiRecentPlayedMenu, // UI中最近播放列表菜单 67 UiMyFavouriteMenu, // UI中“我喜欢的音乐”菜单 68 69 LibPlaylistSortMenu, // 媒体库播放列表排序菜单 70 LibFolderSortMenu, // 媒体库文件夹排序菜单 71 72 LeMenu, // 歌词编辑对话框->窗口菜单 73 LeFileMenu, // 歌词编辑对话框->窗口菜单->子菜单"文件" 74 LeEditMenu, // 歌词编辑对话框->窗口菜单->子菜单"编辑" 75 LeEditChConvMenu, // 歌词编辑对话框->窗口菜单->子菜单"编辑"->子菜单"繁简转换" 76 LeEditTagDislocMenu, // 歌词编辑对话框->窗口菜单->子菜单"编辑"->子菜单"时间标签错位" 77 LeEditTranslateFormatConvertMenu, // 歌词编辑对话框->窗口菜单->子菜单"编辑"->子菜单"翻译格式转换" 78 LePlayCtrlMenu, // 歌词编辑对话框->窗口菜单->子菜单"播放控制" 79 80 FcListMenu, // 转换格式对话框->列表控件 81 LdListMenu, // 歌词下载对话框->列表控件 82 OptDlrcDefStyleMenu, // 选项设置->歌词设置->预设方案按钮 83 OptDlrcModDefStyleMenu, // 选项设置->歌词设置->预设方案按钮菜单->子菜单"修改预设方案" 84 PropertyAdvMenu, // 属性对话框->高级标签信息标签页->列表控件 85 PropertyCoverMenu, // 属性对话框->专辑封面标签页 86 87 FindListMenu, // 查找-查找列表右键菜单 88 89 MenuMax // 菜单数量 90 }; 91 // 目前只支持更新为关联到命令的普通菜单项(默认构造表示分隔符) 92 struct MenuItem 93 { 94 UINT id{ NULL }; 95 IconMgr::IconType icon_type{ IconMgr::IT_NO_ICON }; 96 wstring text; 97 }; 98 // 更新菜单项 99 void UpdateMenu(MenuType menu_type, const vector<MenuItem>& items); 100 // 获取菜单句柄 101 HMENU GetSafeHmenu(MenuType menu_type); 102 // 获取CMenu指针 103 CMenu* GetMenu(MenuType menu_type); 104 // 获取菜单在 <language>.ini 中的键名字符串 105 static const wchar_t* GetMenuNameStr(MenuType menu_type); 106 107 private: 108 class MenuBase; 109 MenuBase& GetMenuBase(MenuType menu_type); 110 void CreateMenu(MenuBase& menu_base); 111 private: 112 std::unique_ptr<MenuBase> m_menus[MenuMax]; 113 }; 114 115