xref: /MusicPlayer2/MusicPlayer2/MenuMgr.cpp (revision 800a68ca4bdb8c4896c14aa157f6b72b26c482d9)
1 #include "stdafx.h"
2 #include "MusicPlayer2.h"
3 #include "MenuMgr.h"
4 #include "WinVersionHelper.h"
5 
6 
7 class MenuMgr::MenuBase
8 {
9 public:
MenuBase(MenuMgr * pMenuMgr,MenuMgr::MenuType menu_type)10     MenuBase(MenuMgr* pMenuMgr, MenuMgr::MenuType menu_type)
11         : m_pMenuMgr(pMenuMgr), m_menu_type(menu_type) {}
~MenuBase()12     ~MenuBase() {}
13 
CreateMenu(bool is_popup,bool add_accelerator)14     void CreateMenu(bool is_popup, bool add_accelerator)
15     {
16         m_add_accelerator = add_accelerator;
17         if (is_popup)
18             m_menu.CreatePopupMenu();
19         else
20             m_menu.CreateMenu();
21     }
22 
AppendItem(UINT wID,const wstring & id_text,IconMgr::IconType icon_type=IconMgr::IT_NO_ICON,const wchar_t * text=nullptr)23     void AppendItem(UINT wID, const wstring& id_text, IconMgr::IconType icon_type = IconMgr::IT_NO_ICON, const wchar_t* text = nullptr)
24     {
25         wstring menu_text;                      // mii使用其内部数据指针,此对象需要有效到api完成
26         MENUITEMINFO mii = { sizeof(mii) };
27         mii.fMask = MIIM_ID | MIIM_STRING | MIIM_FTYPE;
28         mii.wID = wID;
29         if (id_text.empty() && text != nullptr) // 空id_text的话直接使用参数text做正文(给UpdateMenu开的后门)
30             mii.dwTypeData = const_cast<LPWSTR>(text);
31         else
32         {
33             menu_text = theApp.m_str_table.LoadMenuText(MenuMgr::GetMenuNameStr(m_menu_type), id_text);
34             if (text != nullptr)                // 由参数直接指定的快捷键优先级更高
35             {
36                 menu_text.append(L"\t").append(text);
37             }
38             else if (m_add_accelerator)         // 如果CreateMenu时要求自动附加Accelerator快捷键描述
39             {
40                 wstring shortcut = theApp.m_accelerator_res.GetShortcutDescriptionById(wID);
41                 if (!shortcut.empty())
42                     menu_text += L'\t' + shortcut;
43             }
44             mii.dwTypeData = const_cast<LPWSTR>(menu_text.c_str());
45         }
46 #ifndef COMPILE_IN_WIN_XP
47         if (HBITMAP hBmp = m_pMenuMgr->GetMenuBitmapHandle(icon_type))
48         {
49             mii.fMask |= MIIM_BITMAP;
50             mii.hbmpItem = hBmp;
51         }
52 #endif
53         m_menu.InsertMenuItemW(m_end_pos++, &mii, TRUE);
54     }
55 
AppendSubMenu(MenuMgr::MenuType sub_menu_type,IconMgr::IconType icon_type=IconMgr::IT_NO_ICON)56     void AppendSubMenu(MenuMgr::MenuType sub_menu_type, IconMgr::IconType icon_type = IconMgr::IT_NO_ICON)
57     {
58         MENUITEMINFO mii = { sizeof(mii) };
59         mii.fMask = MIIM_STRING | MIIM_SUBMENU | MIIM_FTYPE;
60         mii.hSubMenu = m_pMenuMgr->GetSafeHmenu(sub_menu_type);
61         wstring menu_text = theApp.m_str_table.LoadMenuText(MenuMgr::GetMenuNameStr(m_menu_type), MenuMgr::GetMenuNameStr(sub_menu_type));
62         mii.dwTypeData = const_cast<LPWSTR>(menu_text.c_str());
63 #ifndef COMPILE_IN_WIN_XP
64         if (HBITMAP hBmp = m_pMenuMgr->GetMenuBitmapHandle(icon_type))
65         {
66             mii.fMask |= MIIM_BITMAP;
67             mii.hbmpItem = hBmp;
68         }
69 #endif
70         m_menu.InsertMenuItemW(m_end_pos++, &mii, TRUE);
71     }
72 
AppendSeparator()73     void AppendSeparator()
74     {
75         m_menu.AppendMenuW(MF_SEPARATOR);
76         m_end_pos++;
77     }
78 
SetDefaultItem()79     void SetDefaultItem()
80     {
81         ASSERT(m_end_pos > 0);
82         m_menu.SetDefaultItem(m_end_pos - 1, TRUE);
83     }
84 
UpdateMenu(const vector<MenuMgr::MenuItem> & items)85     void UpdateMenu(const vector<MenuMgr::MenuItem>& items)
86     {
87         ASSERT(m_update_pos != -1);
88         static wstring empty{ L"" };
89         // 将items插入菜单中m_update_pos位置,会替换掉上次设置的内容(此方法不能为一个菜单更新两段内容)
90         int bk_org_cnt = m_end_pos;         // m_end_pos为菜单初始化后的初始项目数
91         m_end_pos = m_update_pos;           // 也是新项目的插入点
92         int cnt = m_menu.GetMenuItemCount() - bk_org_cnt;
93         while (cnt--)                       // 删除旧的外部提供菜单项
94             m_menu.DeleteMenu(m_update_pos, MF_BYPOSITION);   // DeleteMenu如果用于移除子菜单项会销毁子菜单句柄
95         for (const auto& item : items)      // 插入新的外部提供菜单项
96         {
97             if (item.id != NULL)
98                 AppendItem(item.id, empty, item.icon_type, item.text.c_str());
99             else
100                 AppendSeparator();
101         }
102         m_end_pos = bk_org_cnt;             // 恢复为初始项目数
103         // 这里有一点小问题,如果不销毁重建菜单句柄那么菜单会记忆其所需过的文本宽度,也就是不会变窄(至少我不知道怎样做)
104         // 销毁重建会使得这里的共享子菜单机制不能正常工作
105     }
106 
GetMenuType() const107     MenuMgr::MenuType GetMenuType() const { return m_menu_type; }
SetUpdatePos()108     void SetUpdatePos() { m_update_pos = m_end_pos; }
109 
110     CMenu m_menu;
111 private:
112     MenuMgr* m_pMenuMgr;
113     MenuMgr::MenuType m_menu_type;
114     int m_end_pos{ 0 };
115     int m_update_pos{ -1 };
116     bool m_add_accelerator{ false };                // AppendItem是否自动根据命令ID附加加速键列表中的快捷键文本
117 };
118 
MenuMgr()119 MenuMgr::MenuMgr()
120 {
121 }
122 
~MenuMgr()123 MenuMgr::~MenuMgr()
124 {
125 }
126 
127 typedef DWORD ARGB;
128 
GetMenuBitmapHandle(IconMgr::IconType icon_type)129 HBITMAP MenuMgr::GetMenuBitmapHandle(IconMgr::IconType icon_type)
130 {
131     if (auto pBitmap = GetMenuBitmap(icon_type))
132         return static_cast<HBITMAP>(pBitmap->GetSafeHandle());
133     return NULL;
134 }
135 
GetMenuBitmap(IconMgr::IconType icon_type)136 const CBitmap* MenuMgr::GetMenuBitmap(IconMgr::IconType icon_type)
137 {
138     if (icon_type == IconMgr::IconType::IT_NO_ICON)
139         return nullptr;
140 
141     HICON hIcon = theApp.m_icon_mgr.GetHICON(icon_type, IconMgr::IS_OutlinedDark, IconMgr::IconSize::IS_DPI_16);
142     // 取得默认图标尺寸(应该与GetSystemMetrics(SM_CXSMICON/SM_CYSMICON)相同)
143     auto [width, height] = IconMgr::GetIconSize(IconMgr::IconSize::IS_DPI_16);
144 
145     if (m_icon_bitmap_map[hIcon].GetSafeHandle())  // 已有bitmap时不再二次转换
146         return &m_icon_bitmap_map[hIcon];
147 
148     // 创建一个带Alpha通道的DIB节
149     BITMAPINFO bmi{};
150     bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
151     bmi.bmiHeader.biWidth = width;
152     bmi.bmiHeader.biHeight = -height;       // 使用负高度以保证DIB的顶向下的排列
153     bmi.bmiHeader.biPlanes = 1;
154     bmi.bmiHeader.biBitCount = 32;          // 每像素32位,带Alpha通道
155     bmi.bmiHeader.biCompression = BI_RGB;
156 
157     void* pvBits;
158     HBITMAP hbm = CreateDIBSection(NULL, &bmi, DIB_RGB_COLORS, &pvBits, NULL, 0);
159     HDC hdcMem = CreateCompatibleDC(NULL);
160     HBITMAP hbmOld = (HBITMAP)SelectObject(hdcMem, hbm);
161     // 用透明背景填充位图
162     BLENDFUNCTION bf = { AC_SRC_OVER, 0, 255, AC_SRC_ALPHA };
163     AlphaBlend(hdcMem, 0, 0, width, height, hdcMem, 0, 0, width, height, bf);
164     // 将图标绘制到位图上
165     DrawIconEx(hdcMem, 0, 0, hIcon, width, height, 0, NULL, DI_NORMAL);
166     // 清理
167     SelectObject(hdcMem, hbmOld);
168     DeleteDC(hdcMem);
169 
170     m_icon_bitmap_map[hIcon].Attach(hbm);
171 
172     return &m_icon_bitmap_map[hIcon];
173 }
174 
UpdateMenu(MenuType menu_type,const vector<MenuItem> & items)175 void MenuMgr::UpdateMenu(MenuType menu_type, const vector<MenuItem>& items)
176 {
177     MenuBase& menu = GetMenuBase(menu_type);
178     menu.UpdateMenu(items);
179 }
180 
GetSafeHmenu(MenuType menu_type)181 HMENU MenuMgr::GetSafeHmenu(MenuType menu_type)
182 {
183     return GetMenuBase(menu_type).m_menu.GetSafeHmenu();
184 }
185 
GetMenu(MenuType menu_type)186 CMenu* MenuMgr::GetMenu(MenuType menu_type)
187 {
188     return &GetMenuBase(menu_type).m_menu;
189 }
190 
GetMenuBase(MenuType menu_type)191 MenuMgr::MenuBase& MenuMgr::GetMenuBase(MenuType menu_type)
192 {
193     if (m_menus[menu_type] != nullptr)
194     {
195         // 此断言失败说明有代码错误销毁了它之前得到的菜单句柄,菜单句柄生命周期由MenuBase对象负责,其他位置只能使用
196         ASSERT(m_menus[menu_type]->m_menu.GetSafeHmenu());
197         return *m_menus[menu_type];
198     }
199     m_menus[menu_type] = std::make_unique<MenuBase>(this, menu_type);
200     CreateMenu(*m_menus[menu_type]);           // 内部创建子菜单时会使用MenuBase构造得到的this指针调用MenuMgr::GetSafeHmenu递归
201     return *m_menus[menu_type];
202 }
203 
GetMenuNameStr(MenuMgr::MenuType menu_type)204 const wchar_t* MenuMgr::GetMenuNameStr(MenuMgr::MenuType menu_type)
205 {
206     // 这里记录菜单在language.ini的键名,当需要同样翻译的不同菜单时(比如是否为其附加全局快捷键)
207     // 可以为不同的菜单枚举使用相同的键名以复用相同的翻译字符串(建议仅为子集关系的菜单这样做)
208     switch (menu_type)
209     {
210     case MenuMgr::MainPopupMenu:
211         return L"MAIN_POP";
212     case MenuMgr::MainMenu:
213         return L"MAIN";
214     case MenuMgr::MainFileMenu:
215         return L"MAIN_FILE";
216     case MenuMgr::MainPlayCtrlMenu:
217         return L"MAIN_PLAYCTRL";
218     case MenuMgr::MainPlayCtrlRepeatModeMenu:
219         return L"MAIN_PLAYCTRL_REPEAT_MODE";
220     case MenuMgr::MainPlayCtrlAbRepeatMenu:
221         return L"MAIN_PLAYCTRL_AB";
222     case MenuMgr::MainPlaylistMenu:
223         return L"MAIN_PLAYLIST";
224     case MenuMgr::MainPlaylistAddMenu:
225         return L"MAIN_PLAYLIST_ADD";
226     case MenuMgr::MainPlaylistDelMenu:
227         return L"MAIN_PLAYLIST_DEL";
228     case MenuMgr::MainPlaylistSortMenu:
229         return L"MAIN_PLAYLIST_SORT";
230     case MenuMgr::MainPlaylistDispModeMenu:
231         return L"MAIN_PLAYLIST_DISP_MODE";
232     case MenuMgr::MainLyricMenu:
233         return L"MAIN_LRC";
234     case MenuMgr::MainLrcChConvMenu:
235         return L"MAIN_LRC_CH_CONV";
236     case MenuMgr::MainLrcInnerLrcMenu:
237         return L"MAIN_LRC_INNER_LRC";
238     case MenuMgr::MainViewMenu:
239         return L"MAIN_VIEW";
240     case MenuMgr::MainViewSwitchUiMenu:
241         return L"MAIN_VIEW_SWITCH_UI";
242     case MenuMgr::MainToolMenu:
243         return L"MAIN_TOOL";
244     case MenuMgr::MainToolCreateShortcutMenu:
245         return L"MAIN_TOOL_SHORTCUT";
246     case MenuMgr::MainToolAlbumCoverMenu:
247         return L"MAIN_TOOL_ALBUM_COVER";
248     case MenuMgr::MainToolDelCurPlayingMenu:
249         return L"MAIN_TOOL_DEL_CUR_PLAYING";
250     case MenuMgr::MainHelpMenu:
251         return L"MAIN_HELP";
252     case MenuMgr::PlaylistToolBarMenu:
253         return L"PLAYLIST_TOOLBAR";
254     case MenuMgr::PlaylistToolBarListMenu:
255         return L"PLAYLIST_TOOLBAR_LIST";
256     case MenuMgr::PlaylistToolBarEditMenu:
257         return L"PLAYLIST_TOOLBAR_EDIT";
258     case MenuMgr::PlaylistToolBarFolderMenu:
259         return L"PLAYLIST_TOOLBAR_FOLDER";
260     case MenuMgr::MainAreaMenu:
261         return L"MAIN_AREA";
262     case MenuMgr::MainAreaLrcMenu:
263         return L"MAIN_LRC";
264     case MenuMgr::MainAreaPlaylistBtnMenu:
265         return L"MAIN_AREA_PLAYLIST_BTN";
266     case MenuMgr::DlrcMenu:
267         return L"DLRC";
268     case MenuMgr::DlrcDefMenu:
269         return L"DLRC_DEFAULT_STYLE";
270     case MenuMgr::RecentFolderPlaylistMenu:
271         return L"RECENT_FOLDER_PLAYLIST";
272     case MenuMgr::PlaylistMenu:
273         return L"PLAYLIST";
274     case MenuMgr::RateMenu:
275         return L"RATE";
276     case MenuMgr::AddToPlaylistMenu:
277         return L"ADD_TO_PLAYLIST";
278     case MenuMgr::MiniAreaMenu:
279         return L"MINI_AREA";
280     case MenuMgr::MiniModeSwitchUiMenu:
281         return L"MINI_SWITCH_UI";
282     case MenuMgr::NotifyMenu:
283         return L"NOTIFY";
284     case MenuMgr::LibSetPathMenu:
285         return L"LIB_SET_PATH";
286     case MenuMgr::LibPlaylistMenu:
287         return L"LIB_PLAYLIST";
288     case MenuMgr::LibLeftMenu: case MenuMgr::UiLibLeftMenu: case MenuMgr::LibFolderExploreMenu:
289         return L"LIB_LEFT";
290     case MenuMgr::LibRightMenu: case MenuMgr::UiMyFavouriteMenu: case MenuMgr::LibPlaylistRightMenu:
291         return L"LIB_RIGHT";
292     case MenuMgr::UiRecentPlayedMenu: case MenuMgr::FindListMenu:
293         return L"UI_RECENT_PLAYED";
294     case MenuMgr::LibPlaylistSortMenu:
295         return L"LIB_PLAYLIST_SORT";
296     case MenuMgr::LibFolderSortMenu:
297         return L"LIB_FOLDER_SORT";
298     case MenuMgr::LeMenu:
299         return L"LE";
300     case MenuMgr::LeFileMenu:
301         return L"LE_FILE";
302     case MenuMgr::LeEditMenu:
303         return L"LE_EDIT";
304     case MenuMgr::LeEditChConvMenu:
305         return L"LE_EDIT_CH_CONV";
306     case MenuMgr::LeEditTagDislocMenu:
307         return L"LE_EDIT_TAG_DISLOC";
308     case MenuMgr::LeEditTranslateFormatConvertMenu:
309         return L"LE_EDIT_TRANSLATE_FORMAT_CONVERT";
310     case MenuMgr::LePlayCtrlMenu:
311         return L"LE_PLAY_CTRL";
312     case MenuMgr::FcListMenu:
313         return L"FC_LIST";
314     case MenuMgr::LdListMenu:
315         return L"LD_LIST";
316     case MenuMgr::OptDlrcDefStyleMenu:
317         return L"OPT_DLRC_DEFAULT_STYLE";
318     case MenuMgr::OptDlrcModDefStyleMenu:
319         return L"OPT_DLRC_MOD_DEF_STYLE";
320     case MenuMgr::PropertyAdvMenu:
321         return L"PROPERTY_ADV";
322     case MenuMgr::PropertyCoverMenu:
323         return L"PROPERTY_COVER";
324     default:
325         return L"";
326         break;
327     }
328 }
329 
330 #define EX_ID(id) id, L#id
331 
CreateMenu(MenuBase & menu)332 void MenuMgr::CreateMenu(MenuBase& menu)
333 {
334     // git log 47698b win11下使用复选功能的菜单项不设置图标
335     static bool is_win11OrLater = CWinVersionHelper::IsWindows11OrLater();
336     switch (menu.GetMenuType())
337     {
338     case MenuMgr::MainPopupMenu:
339         menu.CreateMenu(true, true);
340         menu.AppendSubMenu(MainFileMenu, IconMgr::IconType::IT_Folder);
341         menu.AppendSubMenu(MainPlayCtrlMenu, IconMgr::IconType::IT_Play);
342         menu.AppendSubMenu(MainPlaylistMenu, IconMgr::IconType::IT_Playlist);
343         menu.AppendSubMenu(MainLyricMenu, IconMgr::IconType::IT_Lyric);
344         menu.AppendSubMenu(MainViewMenu, IconMgr::IconType::IT_Playlist_Dock);
345         menu.AppendSubMenu(MainToolMenu, IconMgr::IconType::IT_Setting);
346         menu.AppendSubMenu(MainHelpMenu, IconMgr::IconType::IT_Help);
347         menu.AppendSeparator();
348         menu.AppendItem(EX_ID(ID_MENU_EXIT), IconMgr::IconType::IT_Exit);
349 #ifdef _DEBUG
350         menu.AppendSeparator();
351         menu.AppendItem(EX_ID(ID_TEST));
352         menu.AppendItem(EX_ID(ID_TEST_DIALOG));
353 #endif
354         break;
355     case MenuMgr::MainMenu:
356         menu.CreateMenu(false, true);
357         menu.AppendSubMenu(MainFileMenu);
358         menu.AppendSubMenu(MainPlayCtrlMenu);
359         menu.AppendSubMenu(MainPlaylistMenu);
360         menu.AppendSubMenu(MainLyricMenu);
361         menu.AppendSubMenu(MainViewMenu);
362         menu.AppendSubMenu(MainToolMenu);
363         menu.AppendSubMenu(MainHelpMenu);
364         break;
365     case MenuMgr::MainFileMenu:
366         menu.CreateMenu(true, true);
367         menu.AppendItem(EX_ID(ID_FILE_OPEN), IconMgr::IconType::IT_Music);
368         menu.AppendItem(EX_ID(ID_FILE_OPEN_FOLDER), IconMgr::IconType::IT_Folder);
369         menu.AppendItem(EX_ID(ID_FILE_OPEN_URL), IconMgr::IconType::IT_Link);
370         menu.AppendItem(EX_ID(ID_FILE_OPEN_PLAYLIST), IconMgr::IconType::IT_Playlist);
371         menu.AppendSeparator();
372         menu.AppendItem(EX_ID(ID_MENU_EXIT), IconMgr::IconType::IT_Exit);
373         break;
374     case MenuMgr::MainPlayCtrlMenu:
375         menu.CreateMenu(true, true);
376         menu.AppendItem(EX_ID(ID_PLAY_PAUSE), IconMgr::IconType::IT_Play_Pause);
377         menu.AppendItem(EX_ID(ID_STOP), IconMgr::IconType::IT_Stop);
378         menu.AppendItem(EX_ID(ID_PREVIOUS), IconMgr::IconType::IT_Previous);
379         menu.AppendItem(EX_ID(ID_NEXT), IconMgr::IconType::IT_Next);
380         menu.AppendSeparator();
381         menu.AppendItem(EX_ID(ID_REW), IconMgr::IconType::IT_Rewind);
382         menu.AppendItem(EX_ID(ID_FF), IconMgr::IconType::IT_Fast_Forward);
383         menu.AppendSeparator();
384         menu.AppendItem(EX_ID(ID_SPEED_UP), IconMgr::IconType::IT_Speed_Up);
385         menu.AppendItem(EX_ID(ID_SLOW_DOWN), IconMgr::IconType::IT_Slow_Down);
386         menu.AppendItem(EX_ID(ID_ORIGINAL_SPEED));
387         menu.AppendSeparator();
388         menu.AppendItem(EX_ID(ID_PITCH_UP));
389         menu.AppendItem(EX_ID(ID_PITCH_DOWN));
390         menu.AppendItem(EX_ID(ID_ORIGINAL_PITCH));
391         menu.AppendSeparator();
392         menu.AppendSubMenu(MainPlayCtrlRepeatModeMenu);
393         menu.AppendSubMenu(MainPlayCtrlAbRepeatMenu);
394         break;
395     case MenuMgr::MainPlayCtrlRepeatModeMenu:
396         menu.CreateMenu(true, false);
397         menu.AppendItem(EX_ID(ID_PLAY_ORDER), IconMgr::IconType::IT_Play_Order);
398         menu.AppendItem(EX_ID(ID_PLAY_SHUFFLE), IconMgr::IconType::IT_Play_Shuffle);
399         menu.AppendItem(EX_ID(ID_PLAY_RANDOM), IconMgr::IconType::IT_Play_Random);
400         menu.AppendItem(EX_ID(ID_LOOP_PLAYLIST), IconMgr::IconType::IT_Loop_Playlist);
401         menu.AppendItem(EX_ID(ID_LOOP_TRACK), IconMgr::IconType::IT_Loop_Track);
402         menu.AppendItem(EX_ID(ID_PLAY_TRACK), IconMgr::IconType::IT_Play_Track);
403         break;
404     case MenuMgr::MainPlayCtrlAbRepeatMenu:
405         menu.CreateMenu(true, true);
406         menu.AppendItem(EX_ID(ID_AB_REPEAT));
407         menu.AppendSeparator();
408         menu.AppendItem(EX_ID(ID_SET_A_POINT));
409         menu.AppendItem(EX_ID(ID_SET_B_POINT));
410         menu.AppendItem(EX_ID(ID_NEXT_AB_REPEAT));
411         menu.AppendItem(EX_ID(ID_RESET_AB_REPEAT));
412         break;
413     case MenuMgr::MainPlaylistMenu:
414         menu.CreateMenu(true, true);
415         menu.AppendSubMenu(MainPlaylistAddMenu, IconMgr::IconType::IT_Add);
416         menu.AppendSubMenu(MainPlaylistDelMenu, IconMgr::IconType::IT_Cancel);
417         menu.AppendItem(EX_ID(ID_RELOAD_PLAYLIST), IconMgr::IconType::IT_Loop_Playlist);
418         menu.AppendSeparator();
419         menu.AppendItem(EX_ID(ID_SAVE_AS_NEW_PLAYLIST), IconMgr::IconType::IT_Save);
420         menu.AppendItem(EX_ID(ID_SAVE_CURRENT_PLAYLIST_AS), IconMgr::IconType::IT_Save_As);
421         menu.AppendSeparator();
422         menu.AppendSubMenu(MainPlaylistSortMenu, IconMgr::IconType::IT_Sort_Mode);
423         menu.AppendSubMenu(MainPlaylistDispModeMenu, IconMgr::IconType::IT_Playlist_Display_Mode);
424         menu.AppendSeparator();
425         menu.AppendItem(EX_ID(ID_LOCATE_TO_CURRENT), IconMgr::IconType::IT_Locate);
426         break;
427     case MenuMgr::MainPlaylistAddMenu:
428         menu.CreateMenu(true, true);
429         menu.AppendItem(EX_ID(ID_PLAYLIST_ADD_FILE), IconMgr::IconType::IT_Music);
430         menu.AppendItem(EX_ID(ID_PLAYLIST_ADD_FOLDER), IconMgr::IconType::IT_Folder);
431         menu.AppendItem(EX_ID(ID_PLAYLIST_ADD_URL), IconMgr::IconType::IT_Link);
432         break;
433     case MenuMgr::MainPlaylistDelMenu:
434         menu.CreateMenu(true, true);
435         menu.AppendItem(EX_ID(ID_REMOVE_FROM_PLAYLIST), IconMgr::IconType::IT_Cancel);
436         menu.AppendItem(EX_ID(ID_DELETE_FROM_DISK));
437         menu.AppendSeparator();
438         menu.AppendItem(EX_ID(ID_EMPTY_PLAYLIST));
439         menu.AppendItem(EX_ID(ID_REMOVE_SAME_SONGS));
440         menu.AppendItem(EX_ID(ID_REMOVE_INVALID_ITEMS));
441         break;
442     case MenuMgr::MainPlaylistSortMenu:
443         menu.CreateMenu(true, true);
444         menu.AppendItem(EX_ID(ID_SORT_BY_FILE));
445         menu.AppendItem(EX_ID(ID_SORT_BY_PATH));
446         menu.AppendItem(EX_ID(ID_SORT_BY_TITLE));
447         menu.AppendItem(EX_ID(ID_SORT_BY_ARTIST));
448         menu.AppendItem(EX_ID(ID_SORT_BY_ALBUM));
449         menu.AppendItem(EX_ID(ID_SORT_BY_TRACK));
450         menu.AppendItem(EX_ID(ID_SORT_BY_LISTEN_TIME));
451         menu.AppendItem(EX_ID(ID_SORT_BY_MODIFIED_TIME));
452         break;
453     case MenuMgr::MainPlaylistDispModeMenu:
454         menu.CreateMenu(true, true);
455         menu.AppendItem(EX_ID(ID_DISP_FILE_NAME));
456         menu.AppendItem(EX_ID(ID_DISP_TITLE));
457         menu.AppendItem(EX_ID(ID_DISP_ARTIST_TITLE));
458         menu.AppendItem(EX_ID(ID_DISP_TITLE_ARTIST));
459         break;
460     case MenuMgr::MainLyricMenu:
461         menu.CreateMenu(true, true);
462         menu.AppendItem(EX_ID(ID_RELOAD_LYRIC), IconMgr::IconType::IT_Loop_Playlist);
463         menu.AppendItem(EX_ID(ID_COPY_CURRENT_LYRIC), IconMgr::IconType::IT_Copy);
464         menu.AppendItem(EX_ID(ID_COPY_ALL_LYRIC));
465         menu.AppendItem(EX_ID(ID_EDIT_LYRIC), IconMgr::IconType::IT_Edit);
466         menu.AppendSubMenu(MainLrcChConvMenu);
467         menu.AppendSeparator();
468         menu.AppendItem(EX_ID(ID_SHOW_LYRIC_TRANSLATE));
469         menu.AppendItem(EX_ID(ID_SHOW_DESKTOP_LYRIC));
470         menu.AppendSeparator();
471         menu.AppendItem(EX_ID(ID_LYRIC_FORWARD), IconMgr::IconType::IT_Triangle_Left);
472         menu.AppendItem(EX_ID(ID_LYRIC_DELAY), IconMgr::IconType::IT_Triangle_Right);
473         menu.AppendItem(EX_ID(ID_SAVE_MODIFIED_LYRIC), IconMgr::IconType::IT_Save);
474         menu.AppendSeparator();
475         menu.AppendItem(EX_ID(ID_RELATE_LOCAL_LYRIC), IconMgr::IconType::IT_Lyric);
476         menu.AppendItem(EX_ID(ID_DELETE_LYRIC), IconMgr::IconType::IT_Cancel);
477         menu.AppendItem(EX_ID(ID_UNLINK_LYRIC), IconMgr::IconType::IT_Unlink);
478         menu.AppendItem(EX_ID(ID_BROWSE_LYRIC), IconMgr::IconType::IT_Folder_Explore);
479         menu.AppendSubMenu(MainLrcInnerLrcMenu, IconMgr::IconType::IT_Internal_Lyric);
480         menu.AppendSeparator();
481         menu.AppendItem(EX_ID(ID_DOWNLOAD_LYRIC), IconMgr::IconType::IT_Download);
482         menu.AppendItem(EX_ID(ID_LYRIC_BATCH_DOWNLOAD), IconMgr::IconType::IT_Download_Batch);
483         break;
484     case MenuMgr::MainLrcChConvMenu:
485         menu.CreateMenu(true, true);
486         menu.AppendItem(EX_ID(ID_TRANSLATE_TO_SIMPLIFIED_CHINESE));
487         menu.AppendItem(EX_ID(ID_TRANSLATE_TO_TRANDITIONAL_CHINESE));
488         break;
489     case MenuMgr::MainLrcInnerLrcMenu:
490         menu.CreateMenu(true, true);
491         menu.AppendItem(EX_ID(ID_EMBED_LYRIC_TO_AUDIO_FILE));
492         menu.AppendItem(EX_ID(ID_DELETE_LYRIC_FROM_AUDIO_FILE));
493         break;
494     case MenuMgr::MainViewMenu:
495         menu.CreateMenu(true, true);
496         menu.AppendItem(EX_ID(ID_SHOW_PLAYLIST), is_win11OrLater ? IconMgr::IconType::IT_NO_ICON : IconMgr::IconType::IT_Playlist_Dock);
497         menu.AppendItem(EX_ID(ID_FLOAT_PLAYLIST), is_win11OrLater ? IconMgr::IconType::IT_NO_ICON : IconMgr::IconType::IT_Playlist_Float);
498         menu.AppendItem(EX_ID(ID_USE_STANDARD_TITLE_BAR));
499         menu.AppendItem(EX_ID(ID_SHOW_MENU_BAR), is_win11OrLater ? IconMgr::IconType::IT_NO_ICON : IconMgr::IconType::IT_Menu);
500         menu.AppendItem(EX_ID(ID_ALWAYS_SHOW_STATUS_BAR));
501         menu.AppendItem(EX_ID(ID_ALWAYS_ON_TOP), is_win11OrLater ? IconMgr::IconType::IT_NO_ICON : IconMgr::IconType::IT_Pin);
502         menu.AppendSeparator();
503         menu.AppendItem(EX_ID(ID_MINI_MODE), IconMgr::IconType::IT_Mini_On);
504         menu.AppendItem(EX_ID(ID_FULL_SCREEN), IconMgr::IconType::IT_Full_Screen_On);
505         menu.AppendSeparator();
506         menu.AppendItem(EX_ID(ID_DARK_MODE), IconMgr::IconType::IT_Dark_Mode_On);
507         menu.AppendSubMenu(MainViewSwitchUiMenu, IconMgr::IconType::IT_Skin);
508         break;
509     case MenuMgr::MainViewSwitchUiMenu:
510         menu.CreateMenu(true, true);
511         menu.AppendItem(EX_ID(ID_SWITCH_UI), IconMgr::IconType::IT_Skin);
512         menu.AppendSeparator();
513         menu.SetUpdatePos();            // 设置Update插入点
514         break;
515     case MenuMgr::MainToolMenu:
516         menu.CreateMenu(true, true);
517         menu.AppendItem(EX_ID(ID_MEDIA_LIB), IconMgr::IconType::IT_Media_Lib);
518         menu.AppendItem(EX_ID(ID_FIND), IconMgr::IconType::IT_Find);
519         menu.AppendItem(EX_ID(ID_EXPLORE_PATH), IconMgr::IconType::IT_Folder_Explore);
520         menu.AppendItem(EX_ID(ID_SONG_INFO), IconMgr::IconType::IT_Info);
521         menu.AppendItem(EX_ID(ID_EQUALIZER), IconMgr::IconType::IT_Equalizer);
522         menu.AppendItem(EX_ID(ID_FORMAT_CONVERT1), IconMgr::IconType::IT_Convert);
523         menu.AppendItem(EX_ID(ID_CURRENT_EXPLORE_ONLINE), IconMgr::IconType::IT_Online);
524         menu.AppendSeparator();
525         menu.AppendItem(EX_ID(ID_RE_INI_BASS), IconMgr::IconType::IT_Refresh);
526         menu.AppendSubMenu(MainToolCreateShortcutMenu, IconMgr::IconType::IT_Shortcut);
527         menu.AppendSeparator();
528         menu.AppendSubMenu(MainToolAlbumCoverMenu, IconMgr::IconType::IT_Album_Cover);
529         menu.AppendSubMenu(MainToolDelCurPlayingMenu, IconMgr::IconType::IT_Cancel);
530         menu.AppendSeparator();
531         menu.AppendItem(EX_ID(ID_LISTEN_STATISTICS), IconMgr::IconType::IT_Statistics);
532         menu.AppendItem(EX_ID(ID_TOOL_FILE_RELATE), IconMgr::IconType::IT_File_Relate);
533         menu.AppendItem(EX_ID(ID_OPTION_SETTINGS), IconMgr::IconType::IT_Setting);
534         break;
535     case MenuMgr::MainToolCreateShortcutMenu:
536         menu.CreateMenu(true, true);
537         menu.AppendItem(EX_ID(ID_CREATE_DESKTOP_SHORTCUT));
538         menu.AppendItem(EX_ID(ID_CREATE_PLAY_SHORTCUT));
539         menu.AppendItem(EX_ID(ID_CREATE_MINI_MODE_SHORT_CUT));
540         break;
541     case MenuMgr::MainToolAlbumCoverMenu:
542         menu.CreateMenu(true, true);
543         menu.AppendItem(EX_ID(ID_DOWNLOAD_ALBUM_COVER), IconMgr::IconType::IT_Download);
544         menu.AppendItem(EX_ID(ID_ALBUM_COVER_SAVE_AS), IconMgr::IconType::IT_Save_As);
545         menu.AppendItem(EX_ID(ID_DELETE_ALBUM_COVER), IconMgr::IconType::IT_Cancel);
546         menu.AppendItem(EX_ID(ID_ALBUM_COVER_INFO), IconMgr::IconType::IT_Album_Cover);
547         break;
548     case MenuMgr::MainToolDelCurPlayingMenu:
549         menu.CreateMenu(true, true);
550         menu.AppendItem(EX_ID(ID_REMOVE_CURRENT_FROM_PLAYLIST));
551         menu.AppendItem(EX_ID(ID_DELETE_CURRENT_FROM_DISK));
552         break;
553     case MenuMgr::MainHelpMenu:
554         menu.CreateMenu(true, true);
555         menu.AppendItem(EX_ID(ID_HELP), IconMgr::IconType::IT_Help, L"F1");
556         menu.AppendItem(EX_ID(ID_ONLINE_HELP));
557         menu.AppendItem(EX_ID(ID_HELP_FAQ));
558         menu.AppendItem(EX_ID(ID_HELP_CUSTOM_UI));
559         menu.AppendItem(EX_ID(ID_HELP_UPDATE_LOG));
560         menu.AppendItem(EX_ID(ID_SUPPORTED_FORMAT));
561         menu.AppendSeparator();
562         menu.AppendItem(EX_ID(ID_APP_ABOUT), IconMgr::IconType::IT_App);
563         break;
564     case MenuMgr::PlaylistToolBarMenu:
565         menu.CreateMenu(true, true);
566         menu.AppendSubMenu(MainPlaylistAddMenu, IconMgr::IconType::IT_Add);
567         menu.AppendSubMenu(MainPlaylistDelMenu, IconMgr::IconType::IT_Cancel);
568         menu.AppendSubMenu(MainPlaylistSortMenu, IconMgr::IconType::IT_Sort_Mode);
569         menu.AppendSubMenu(PlaylistToolBarListMenu, IconMgr::IconType::IT_Playlist);
570         menu.AppendSubMenu(PlaylistToolBarEditMenu, IconMgr::IconType::IT_Edit);
571         menu.AppendSubMenu(PlaylistToolBarFolderMenu, IconMgr::IconType::IT_Folder);
572         menu.AppendSeparator();
573         menu.AppendItem(EX_ID(ID_LOCATE_TO_CURRENT), IconMgr::IconType::IT_Locate);
574         break;
575     case MenuMgr::PlaylistToolBarListMenu:
576         menu.CreateMenu(true, true);
577         menu.AppendItem(EX_ID(ID_RELOAD_PLAYLIST), IconMgr::IconType::IT_Loop_Playlist);
578         menu.AppendItem(EX_ID(ID_SAVE_AS_NEW_PLAYLIST), IconMgr::IconType::IT_Save);
579         menu.AppendItem(EX_ID(ID_SAVE_CURRENT_PLAYLIST_AS), IconMgr::IconType::IT_Save_As);
580         menu.AppendSeparator();
581         menu.AppendItem(EX_ID(ID_PLAYLIST_FIX_PATH_ERROR), IconMgr::IconType::IT_Fix);
582         menu.AppendSubMenu(MainPlaylistDispModeMenu, IconMgr::IconType::IT_Playlist_Display_Mode);
583         menu.AppendItem(EX_ID(ID_PLAYLIST_OPTIONS), IconMgr::IconType::IT_Setting);
584         break;
585     case MenuMgr::PlaylistToolBarEditMenu:
586         menu.CreateMenu(true, true);
587         menu.AppendSubMenu(AddToPlaylistMenu, IconMgr::IconType::IT_Add);
588         menu.AppendItem(EX_ID(ID_COPY_FILE_TO));
589         menu.AppendItem(EX_ID(ID_MOVE_FILE_TO));
590         menu.AppendSeparator();
591         menu.AppendItem(EX_ID(ID_MOVE_PLAYLIST_ITEM_UP));
592         menu.AppendItem(EX_ID(ID_MOVE_PLAYLIST_ITEM_DOWN));
593         menu.AppendSeparator();
594         menu.AppendItem(EX_ID(ID_PLAYLIST_SELECT_ALL));
595         menu.AppendItem(EX_ID(ID_PLAYLIST_SELECT_NONE));
596         menu.AppendItem(EX_ID(ID_PLAYLIST_SELECT_REVERT));
597         break;
598     case MenuMgr::PlaylistToolBarFolderMenu:
599         menu.CreateMenu(true, true);
600         menu.AppendItem(EX_ID(ID_FILE_OPEN_FOLDER), IconMgr::IconType::IT_Folder);
601         menu.AppendItem(EX_ID(ID_CONTAIN_SUB_FOLDER));
602         break;
603     case MenuMgr::MainAreaMenu:
604         menu.CreateMenu(true, true);
605         menu.AppendItem(EX_ID(ID_SONG_INFO), IconMgr::IconType::IT_Info);
606         menu.AppendSubMenu(MainPlayCtrlRepeatModeMenu);
607         menu.AppendSubMenu(AddToPlaylistMenu, IconMgr::IconType::IT_Add);
608         menu.AppendSubMenu(RateMenu, IconMgr::IconType::IT_Star);
609         menu.AppendSeparator();
610         menu.AppendItem(EX_ID(ID_MEDIA_LIB), IconMgr::IconType::IT_Media_Lib);
611         menu.AppendItem(EX_ID(ID_FIND), IconMgr::IconType::IT_Find);
612         menu.AppendItem(EX_ID(ID_EXPLORE_PATH), IconMgr::IconType::IT_Folder_Explore);
613         menu.AppendItem(EX_ID(ID_EQUALIZER), IconMgr::IconType::IT_Equalizer);
614         menu.AppendItem(EX_ID(ID_CURRENT_EXPLORE_ONLINE), IconMgr::IconType::IT_Online);
615         menu.AppendSeparator();
616         menu.AppendItem(EX_ID(ID_DOWNLOAD_ALBUM_COVER), IconMgr::IconType::IT_Download);
617         menu.AppendItem(EX_ID(ID_ALBUM_COVER_SAVE_AS), IconMgr::IconType::IT_Save_As);
618         menu.AppendItem(EX_ID(ID_DELETE_ALBUM_COVER), IconMgr::IconType::IT_Cancel);
619         menu.AppendItem(EX_ID(ID_ALWAYS_USE_EXTERNAL_ALBUM_COVER));
620         menu.AppendItem(EX_ID(ID_ALBUM_COVER_INFO), IconMgr::IconType::IT_Album_Cover);
621         menu.AppendSeparator();
622         menu.AppendItem(EX_ID(ID_VIEW_ARTIST), IconMgr::IconType::IT_Artist);
623         menu.AppendItem(EX_ID(ID_VIEW_ALBUM), IconMgr::IconType::IT_Album);
624         menu.AppendSeparator();
625         menu.AppendSubMenu(MainViewSwitchUiMenu, IconMgr::IconType::IT_Skin);
626         menu.AppendItem(EX_ID(ID_OPTION_SETTINGS), IconMgr::IconType::IT_Setting);
627         break;
628     case MenuMgr::MainAreaLrcMenu:
629         menu.CreateMenu(true, true);
630         menu.AppendItem(EX_ID(ID_RELOAD_LYRIC), IconMgr::IconType::IT_Loop_Playlist);
631         menu.AppendItem(EX_ID(ID_COPY_CURRENT_LYRIC), IconMgr::IconType::IT_Copy);
632         menu.AppendItem(EX_ID(ID_COPY_ALL_LYRIC));
633         menu.AppendItem(EX_ID(ID_EDIT_LYRIC), IconMgr::IconType::IT_Edit);
634         menu.AppendSubMenu(MainLrcChConvMenu);
635         menu.AppendSeparator();
636         menu.AppendItem(EX_ID(ID_SHOW_LYRIC_TRANSLATE));
637         menu.AppendItem(EX_ID(ID_SHOW_DESKTOP_LYRIC));
638         menu.AppendSeparator();
639         menu.AppendItem(EX_ID(ID_LYRIC_FORWARD), IconMgr::IconType::IT_Triangle_Left);
640         menu.AppendItem(EX_ID(ID_LYRIC_DELAY), IconMgr::IconType::IT_Triangle_Right);
641         menu.AppendItem(EX_ID(ID_SAVE_MODIFIED_LYRIC), IconMgr::IconType::IT_Save);
642         menu.AppendSeparator();
643         menu.AppendItem(EX_ID(ID_RELATE_LOCAL_LYRIC), IconMgr::IconType::IT_Lyric);
644         menu.AppendItem(EX_ID(ID_DELETE_LYRIC), IconMgr::IconType::IT_Cancel);
645         menu.AppendItem(EX_ID(ID_UNLINK_LYRIC), IconMgr::IconType::IT_Unlink);
646         menu.AppendItem(EX_ID(ID_BROWSE_LYRIC), IconMgr::IconType::IT_Folder_Explore);
647         menu.AppendSubMenu(MainLrcInnerLrcMenu, IconMgr::IconType::IT_Internal_Lyric);
648         menu.AppendSeparator();
649         menu.AppendItem(EX_ID(ID_DOWNLOAD_LYRIC), IconMgr::IconType::IT_Download);
650         menu.AppendItem(EX_ID(ID_LYRIC_BATCH_DOWNLOAD), IconMgr::IconType::IT_Download_Batch);
651         menu.AppendSeparator();
652         menu.AppendSubMenu(MainViewSwitchUiMenu, IconMgr::IconType::IT_Skin);
653         menu.AppendItem(EX_ID(ID_OPTION_SETTINGS), IconMgr::IconType::IT_Setting);
654         break;
655     case MenuMgr::MainAreaPlaylistBtnMenu:
656         menu.CreateMenu(true, false);
657         menu.AppendItem(EX_ID(ID_DOCKED_PLAYLIST));
658         menu.AppendItem(EX_ID(ID_FLOATED_PLAYLIST));
659         break;
660     case MenuMgr::DlrcMenu:
661         menu.CreateMenu(true, true);
662         menu.AppendItem(EX_ID(ID_PLAY_PAUSE), IconMgr::IconType::IT_Play_Pause);
663         menu.AppendItem(EX_ID(ID_STOP), IconMgr::IconType::IT_Stop);
664         menu.AppendItem(EX_ID(ID_PREVIOUS), IconMgr::IconType::IT_Previous);
665         menu.AppendItem(EX_ID(ID_NEXT), IconMgr::IconType::IT_Next);
666         menu.AppendSubMenu(MainPlayCtrlRepeatModeMenu);
667         menu.AppendSeparator();
668         menu.AppendItem(EX_ID(ID_SHOW_MAIN_WINDOW));
669         menu.AppendItem(EX_ID(ID_LYRIC_DISPLAYED_DOUBLE_LINE), IconMgr::IconType::IT_Double_Line);
670         menu.AppendItem(EX_ID(ID_LYRIC_BACKGROUND_PENETRATE), IconMgr::IconType::IT_Skin);
671         menu.AppendItem(EX_ID(ID_LOCK_DESKTOP_LRYIC), IconMgr::IconType::IT_Lock);
672         menu.AppendSubMenu(DlrcDefMenu, IconMgr::IconType::IT_Media_Lib);
673         menu.AppendItem(EX_ID(ID_OPTION_SETTINGS), IconMgr::IconType::IT_Setting);
674         menu.AppendItem(EX_ID(ID_CLOSE_DESKTOP_LYRIC), IconMgr::IconType::IT_Cancel);
675         break;
676     case MenuMgr::DlrcDefMenu:
677         menu.CreateMenu(true, true);
678         menu.AppendItem(EX_ID(ID_LYRIC_DEFAULT_STYLE1));
679         menu.AppendItem(EX_ID(ID_LYRIC_DEFAULT_STYLE2));
680         menu.AppendItem(EX_ID(ID_LYRIC_DEFAULT_STYLE3));
681         break;
682     case MenuMgr::RecentFolderPlaylistMenu:
683         menu.CreateMenu(true, true);
684         menu.SetUpdatePos();            // 设置Update插入点
685         menu.AppendSeparator();
686         menu.AppendItem(EX_ID(ID_MORE_RECENT_ITEMS), IconMgr::IconType::IT_More);
687         menu.AppendItem(EX_ID(ID_MEDIA_LIB), IconMgr::IconType::IT_Media_Lib);
688         break;
689     case MenuMgr::PlaylistMenu:
690         menu.CreateMenu(true, true);
691         menu.AppendItem(EX_ID(ID_PLAY_ITEM), IconMgr::IconType::IT_Play);
692         menu.SetDefaultItem();
693         menu.AppendItem(EX_ID(ID_PLAY_AS_NEXT), IconMgr::IconType::IT_Play_As_Next);
694         menu.AppendSeparator();
695         menu.AppendItem(EX_ID(ID_EXPLORE_ONLINE), IconMgr::IconType::IT_Online);
696         menu.AppendItem(EX_ID(ID_FORMAT_CONVERT), IconMgr::IconType::IT_Convert);
697         menu.AppendSubMenu(RateMenu, IconMgr::IconType::IT_Star);
698         menu.AppendSeparator();
699         menu.AppendItem(EX_ID(ID_RELOAD_PLAYLIST), IconMgr::IconType::IT_Loop_Playlist);
700         menu.AppendSeparator();
701         menu.AppendItem(EX_ID(ID_REMOVE_FROM_PLAYLIST), IconMgr::IconType::IT_Cancel);
702         menu.AppendItem(EX_ID(ID_DELETE_FROM_DISK));
703         menu.AppendSeparator();
704         menu.AppendSubMenu(AddToPlaylistMenu, IconMgr::IconType::IT_Add);
705         menu.AppendItem(EX_ID(ID_COPY_FILE_TO));
706         menu.AppendItem(EX_ID(ID_MOVE_FILE_TO));
707         menu.AppendSeparator();
708         menu.AppendItem(EX_ID(ID_MOVE_PLAYLIST_ITEM_UP));
709         menu.AppendItem(EX_ID(ID_MOVE_PLAYLIST_ITEM_DOWN));
710         menu.AppendSeparator();
711         menu.AppendItem(EX_ID(ID_PLAYLIST_VIEW_ARTIST), IconMgr::IconType::IT_Artist);
712         menu.AppendItem(EX_ID(ID_PLAYLIST_VIEW_ALBUM), IconMgr::IconType::IT_Album);
713         menu.AppendSeparator();
714         menu.AppendItem(EX_ID(ID_RENAME), IconMgr::IconType::IT_Rename);
715         menu.AppendItem(EX_ID(ID_EXPLORE_TRACK), IconMgr::IconType::IT_Folder_Explore);
716         menu.AppendItem(EX_ID(ID_ITEM_PROPERTY), IconMgr::IconType::IT_Info);
717         break;
718     case MenuMgr::RateMenu:
719         menu.CreateMenu(true, true);
720         menu.AppendItem(EX_ID(ID_RATING_1));
721         menu.AppendItem(EX_ID(ID_RATING_2));
722         menu.AppendItem(EX_ID(ID_RATING_3));
723         menu.AppendItem(EX_ID(ID_RATING_4));
724         menu.AppendItem(EX_ID(ID_RATING_5));
725         menu.AppendSeparator();
726         menu.AppendItem(EX_ID(ID_RATING_NONE));
727         break;
728     case MenuMgr::AddToPlaylistMenu:
729         menu.CreateMenu(true, true);
730         menu.AppendItem(EX_ID(ID_ADD_TO_NEW_PLAYLIST), IconMgr::IconType::IT_Add);
731         menu.AppendSeparator();
732         menu.AppendItem(EX_ID(ID_ADD_TO_DEFAULT_PLAYLIST));
733         menu.AppendItem(EX_ID(ID_ADD_TO_MY_FAVOURITE), IconMgr::IconType::IT_Favorite_On);
734         menu.SetUpdatePos();            // 设置Update插入点
735         menu.AppendSeparator();
736         menu.AppendItem(EX_ID(ID_ADD_TO_OTHER_PLAYLIST), IconMgr::IconType::IT_Playlist);
737         break;
738     case MenuMgr::MiniAreaMenu:
739         menu.CreateMenu(true, true);
740         menu.AppendItem(EX_ID(ID_SONG_INFO), IconMgr::IconType::IT_Info);
741         menu.AppendSubMenu(MainPlayCtrlRepeatModeMenu);
742         menu.AppendSubMenu(AddToPlaylistMenu, IconMgr::IconType::IT_Add);
743         menu.AppendSeparator();
744         menu.AppendItem(EX_ID(ID_DOWNLOAD_LYRIC), IconMgr::IconType::IT_Download);
745         menu.AppendItem(EX_ID(ID_DOWNLOAD_ALBUM_COVER), IconMgr::IconType::IT_Album_Cover);
746         menu.AppendSeparator();
747         menu.AppendItem(EX_ID(ID_ADD_REMOVE_FROM_FAVOURITE), IconMgr::IconType::IT_Favorite_On);
748         menu.AppendSeparator();
749         menu.AppendItem(EX_ID(ID_MEDIA_LIB), IconMgr::IconType::IT_Media_Lib);
750         menu.AppendItem(EX_ID(ID_FIND), IconMgr::IconType::IT_Find);
751         menu.AppendItem(EX_ID(ID_EXPLORE_PATH), IconMgr::IconType::IT_Folder_Explore);
752         menu.AppendItem(EX_ID(ID_EQUALIZER), IconMgr::IconType::IT_Equalizer);
753         menu.AppendItem(EX_ID(ID_OPTION_SETTINGS), IconMgr::IconType::IT_Setting);
754         menu.AppendSeparator();
755         menu.AppendItem(EX_ID(ID_SHOW_PLAY_LIST), is_win11OrLater ? IconMgr::IconType::IT_NO_ICON : IconMgr::IconType::IT_Playlist, L"Ctrl+L");
756         menu.AppendItem(EX_ID(ID_MINI_MODE_ALWAYS_ON_TOP), is_win11OrLater ? IconMgr::IconType::IT_NO_ICON : IconMgr::IconType::IT_Pin);
757         menu.AppendSubMenu(MiniModeSwitchUiMenu, IconMgr::IconType::IT_Skin);
758         menu.AppendSeparator();
759         menu.AppendItem(EX_ID(ID_MINI_MIDE_MINIMIZE), IconMgr::IconType::IT_Minimize);
760         menu.AppendItem(EX_ID(IDOK), IconMgr::IconType::IT_Mini_Off, L"Esc");
761         menu.AppendItem(EX_ID(ID_MINI_MODE_EXIT), IconMgr::IconType::IT_Exit, L"Ctrl+X");
762         break;
763     case MenuMgr::MiniModeSwitchUiMenu:
764         menu.CreateMenu(true, true);
765         menu.AppendItem(EX_ID(ID_MINIMODE_UI_DEFAULT));
766         menu.SetUpdatePos();            // 设置Update插入点
767         break;
768     case MenuMgr::NotifyMenu:
769         menu.CreateMenu(true, false);
770         menu.AppendItem(EX_ID(ID_PLAY_PAUSE), IconMgr::IconType::IT_Play_Pause);
771         menu.AppendItem(EX_ID(ID_PREVIOUS), IconMgr::IconType::IT_Previous);
772         menu.AppendItem(EX_ID(ID_NEXT), IconMgr::IconType::IT_Next);
773         menu.AppendSubMenu(MainPlayCtrlRepeatModeMenu);
774         menu.AppendItem(EX_ID(ID_MINIMODE_RESTORE), IconMgr::IconType::IT_Mini_Off);
775         menu.AppendItem(EX_ID(ID_SHOW_DESKTOP_LYRIC), IconMgr::IconType::IT_Lyric);
776         menu.AppendItem(EX_ID(ID_LOCK_DESKTOP_LRYIC), IconMgr::IconType::IT_Lock);
777         menu.AppendSeparator();
778         menu.AppendItem(EX_ID(ID_OPTION_SETTINGS), IconMgr::IconType::IT_Setting);
779         menu.AppendItem(EX_ID(ID_MENU_EXIT), IconMgr::IconType::IT_Exit);
780         break;
781     case MenuMgr::LibSetPathMenu:
782         menu.CreateMenu(true, false);
783         menu.AppendItem(EX_ID(ID_PLAY_PATH), IconMgr::IconType::IT_Play);
784         menu.SetDefaultItem();
785         menu.AppendItem(EX_ID(ID_DELETE_PATH), IconMgr::IconType::IT_Cancel);
786         menu.AppendItem(EX_ID(ID_BROWSE_PATH), IconMgr::IconType::IT_Folder_Explore);
787         menu.AppendItem(EX_ID(ID_CONTAIN_SUB_FOLDER));
788         menu.AppendSubMenu(AddToPlaylistMenu, IconMgr::IconType::IT_Add);
789         menu.AppendSeparator();
790         menu.AppendItem(EX_ID(ID_CLEAR_INVALID_PATH));
791         menu.AppendItem(EX_ID(ID_FILE_OPEN_FOLDER), IconMgr::IconType::IT_NewFolder);
792         menu.AppendItem(EX_ID(ID_LIB_FOLDER_PROPERTIES), IconMgr::IconType::IT_Info);
793         break;
794     case MenuMgr::LibPlaylistMenu:
795         menu.CreateMenu(true, false);
796         menu.AppendItem(EX_ID(ID_PLAY_PLAYLIST), IconMgr::IconType::IT_Play);
797         menu.SetDefaultItem();
798         menu.AppendItem(EX_ID(ID_RENAME_PLAYLIST), IconMgr::IconType::IT_Rename);
799         menu.AppendItem(EX_ID(ID_DELETE_PLAYLIST), IconMgr::IconType::IT_Cancel);
800         menu.AppendItem(EX_ID(ID_SAVE_AS_NEW_PLAYLIST), IconMgr::IconType::IT_Save);
801         menu.AppendItem(EX_ID(ID_PLAYLIST_SAVE_AS), IconMgr::IconType::IT_Save_As);
802         menu.AppendSeparator();
803         menu.AppendItem(EX_ID(ID_PLAYLIST_BROWSE_FILE), IconMgr::IconType::IT_Folder_Explore);
804         menu.AppendItem(EX_ID(ID_PLAYLIST_FIX_PATH_ERROR), IconMgr::IconType::IT_Fix);
805         menu.AppendSeparator();
806         menu.AppendItem(EX_ID(ID_NEW_PLAYLIST), IconMgr::IconType::IT_Add);
807         menu.AppendItem(EX_ID(ID_LIB_PLAYLIST_PROPERTIES), IconMgr::IconType::IT_Info);
808         break;
809     case MenuMgr::LibLeftMenu:
810         menu.CreateMenu(true, false);
811         menu.AppendItem(EX_ID(ID_PLAY_ITEM), IconMgr::IconType::IT_Play);
812         menu.SetDefaultItem();
813         menu.AppendSubMenu(AddToPlaylistMenu, IconMgr::IconType::IT_Add);
814         menu.AppendItem(EX_ID(ID_ADD_TO_NEW_PLAYLIST_AND_PLAY), IconMgr::IconType::IT_Play_In_Playlist);
815         menu.AppendSeparator();
816         menu.AppendItem(EX_ID(ID_COPY_TEXT), IconMgr::IconType::IT_Copy);
817         break;
818     case MenuMgr::LibRightMenu:
819         menu.CreateMenu(true, false);
820         menu.AppendItem(EX_ID(ID_PLAY_ITEM), IconMgr::IconType::IT_Play);
821         menu.SetDefaultItem();
822         menu.AppendItem(EX_ID(ID_PLAY_AS_NEXT), IconMgr::IconType::IT_Play_As_Next);
823         menu.AppendItem(EX_ID(ID_PLAY_ITEM_IN_FOLDER_MODE), IconMgr::IconType::IT_Play_In_Folder);
824         menu.AppendSeparator();
825         menu.AppendSubMenu(AddToPlaylistMenu, IconMgr::IconType::IT_Add);
826         menu.AppendItem(EX_ID(ID_ADD_TO_NEW_PLAYLIST_AND_PLAY), IconMgr::IconType::IT_Play_In_Playlist);
827         menu.AppendSubMenu(RateMenu, IconMgr::IconType::IT_Star);
828         menu.AppendSeparator();
829         menu.AppendItem(EX_ID(ID_EXPLORE_ONLINE), IconMgr::IconType::IT_Online);
830         menu.AppendItem(EX_ID(ID_FORMAT_CONVERT), IconMgr::IconType::IT_Convert);
831         menu.AppendItem(EX_ID(ID_EXPLORE_TRACK), IconMgr::IconType::IT_Folder_Explore);
832         menu.AppendItem(EX_ID(ID_DELETE_FROM_DISK), IconMgr::IconType::IT_Cancel);
833         menu.AppendItem(EX_ID(ID_ITEM_PROPERTY), IconMgr::IconType::IT_Info);
834         menu.AppendSeparator();
835         menu.AppendItem(EX_ID(ID_COPY_TEXT), IconMgr::IconType::IT_Copy);
836         break;
837     case MenuMgr::LibPlaylistRightMenu:
838         menu.CreateMenu(true, false);
839         menu.AppendItem(EX_ID(ID_PLAY_ITEM), IconMgr::IconType::IT_Play);
840         menu.SetDefaultItem();
841         menu.AppendItem(EX_ID(ID_PLAY_AS_NEXT), IconMgr::IconType::IT_Play_As_Next);
842         menu.AppendItem(EX_ID(ID_PLAY_ITEM_IN_FOLDER_MODE), IconMgr::IconType::IT_Play_In_Folder);
843         menu.AppendSeparator();
844         menu.AppendSubMenu(AddToPlaylistMenu, IconMgr::IconType::IT_Add);
845         menu.AppendItem(EX_ID(ID_ADD_TO_NEW_PLAYLIST_AND_PLAY), IconMgr::IconType::IT_Play_In_Playlist);
846         menu.AppendSubMenu(RateMenu, IconMgr::IconType::IT_Star);
847         menu.AppendSeparator();
848         menu.AppendItem(EX_ID(ID_EXPLORE_ONLINE), IconMgr::IconType::IT_Online);
849         menu.AppendItem(EX_ID(ID_FORMAT_CONVERT), IconMgr::IconType::IT_Convert);
850         menu.AppendItem(EX_ID(ID_EXPLORE_TRACK), IconMgr::IconType::IT_Folder_Explore);
851         menu.AppendItem(EX_ID(ID_REMOVE_FROM_PLAYLIST), IconMgr::IconType::IT_Cancel);
852         menu.AppendItem(EX_ID(ID_DELETE_FROM_DISK));
853         menu.AppendItem(EX_ID(ID_ITEM_PROPERTY), IconMgr::IconType::IT_Info);
854         menu.AppendSeparator();
855         menu.AppendItem(EX_ID(ID_COPY_TEXT), IconMgr::IconType::IT_Copy);
856         break;
857     case MenuMgr::LibFolderExploreMenu:
858         menu.CreateMenu(true, false);
859         menu.AppendItem(EX_ID(ID_PLAY_ITEM), IconMgr::IconType::IT_Play);
860         menu.SetDefaultItem();
861         menu.AppendSubMenu(AddToPlaylistMenu, IconMgr::IconType::IT_Add);
862         menu.AppendItem(EX_ID(ID_ADD_TO_NEW_PLAYLIST_AND_PLAY), IconMgr::IconType::IT_Play_In_Playlist);
863         menu.AppendSeparator();
864         menu.AppendItem(EX_ID(ID_COPY_TEXT), IconMgr::IconType::IT_Copy);
865         menu.AppendItem(EX_ID(ID_BROWSE_PATH), IconMgr::IconType::IT_Folder_Explore);
866         break;
867     case MenuMgr::UiLibLeftMenu:
868         menu.CreateMenu(true, false);
869         menu.AppendItem(EX_ID(ID_PLAY_ITEM), IconMgr::IconType::IT_Play);
870         menu.SetDefaultItem();
871         menu.AppendSubMenu(AddToPlaylistMenu, IconMgr::IconType::IT_Add);
872         menu.AppendItem(EX_ID(ID_ADD_TO_NEW_PLAYLIST_AND_PLAY), IconMgr::IconType::IT_Play_In_Playlist);
873         menu.AppendSeparator();
874         menu.AppendItem(EX_ID(ID_COPY_TEXT), IconMgr::IconType::IT_Copy);
875         menu.AppendItem(EX_ID(ID_VIEW_IN_MEDIA_LIB), IconMgr::IconType::IT_Media_Lib);
876         break;
877     case MenuMgr::UiRecentPlayedMenu:
878         menu.CreateMenu(true, false);
879         menu.AppendItem(EX_ID(ID_PLAY_ITEM), IconMgr::IconType::IT_Play);
880         menu.SetDefaultItem();
881         menu.AppendItem(EX_ID(ID_RECENT_PLAYED_REMOVE), IconMgr::IconType::IT_Close);
882         menu.AppendItem(EX_ID(ID_COPY_TEXT), IconMgr::IconType::IT_Copy);
883         menu.AppendSeparator();
884         menu.AppendItem(EX_ID(ID_VIEW_IN_MEDIA_LIB), IconMgr::IconType::IT_Media_Lib);
885         menu.AppendItem(EX_ID(ID_LIB_RECENT_PLAYED_ITEM_PROPERTIES), IconMgr::IconType::IT_Info);
886         break;
887     case MenuMgr::UiMyFavouriteMenu:
888         menu.CreateMenu(true, false);
889         menu.AppendItem(EX_ID(ID_PLAY_ITEM), IconMgr::IconType::IT_Play);
890         menu.SetDefaultItem();
891         menu.AppendItem(EX_ID(ID_PLAY_AS_NEXT), IconMgr::IconType::IT_Play_As_Next);
892         menu.AppendItem(EX_ID(ID_PLAY_ITEM_IN_FOLDER_MODE), IconMgr::IconType::IT_Play_In_Folder);
893         menu.AppendSubMenu(AddToPlaylistMenu, IconMgr::IconType::IT_Add);
894         menu.AppendSubMenu(RateMenu, IconMgr::IconType::IT_Star);
895         menu.AppendSeparator();
896         menu.AppendItem(EX_ID(ID_EXPLORE_ONLINE), IconMgr::IconType::IT_Online);
897         menu.AppendItem(EX_ID(ID_FORMAT_CONVERT), IconMgr::IconType::IT_Convert);
898         menu.AppendItem(EX_ID(ID_EXPLORE_TRACK), IconMgr::IconType::IT_Folder_Explore);
899         menu.AppendItem(EX_ID(ID_REMOVE_FROM_PLAYLIST), IconMgr::IconType::IT_Cancel);
900         menu.AppendItem(EX_ID(ID_DELETE_FROM_DISK));
901         menu.AppendItem(EX_ID(ID_ITEM_PROPERTY), IconMgr::IconType::IT_Info);
902         menu.AppendSeparator();
903         menu.AppendItem(EX_ID(ID_COPY_TEXT), IconMgr::IconType::IT_Copy);
904         break;
905     case MenuMgr::LibPlaylistSortMenu:
906         menu.CreateMenu(true, false);
907         menu.AppendItem(EX_ID(ID_LIB_PLAYLIST_SORT_RECENT_PLAYED));
908         menu.AppendItem(EX_ID(ID_LIB_PLAYLIST_SORT_RECENT_CREATED));
909         menu.AppendItem(EX_ID(ID_LIB_PLAYLIST_SORT_NAME));
910         break;
911     case MenuMgr::LibFolderSortMenu:
912         menu.CreateMenu(true, false);
913         menu.AppendItem(EX_ID(ID_LIB_FOLDER_SORT_RECENT_PLAYED));
914         menu.AppendItem(EX_ID(ID_LIB_FOLDER_SORT_RECENT_ADDED));
915         menu.AppendItem(EX_ID(ID_LIB_FOLDER_SORT_PATH));
916         break;
917     case MenuMgr::LeMenu:
918         menu.CreateMenu(false, false);
919         menu.AppendSubMenu(LeFileMenu);
920         menu.AppendSubMenu(LeEditMenu);
921         menu.AppendSubMenu(LePlayCtrlMenu);
922         break;
923     case MenuMgr::LeFileMenu:
924         menu.CreateMenu(true, false);
925         menu.AppendItem(EX_ID(ID_LYRIC_OPEN), IconMgr::IconType::IT_Music);
926         menu.AppendItem(EX_ID(ID_LYRIC_SAVE), IconMgr::IconType::IT_Save, L"Ctrl+S");
927         menu.AppendItem(EX_ID(ID_LYRIC_SAVE_AS), IconMgr::IconType::IT_Save_As);
928         menu.AppendSeparator();
929         menu.AppendItem(EX_ID(IDCANCEL), IconMgr::IconType::IT_Exit);
930         break;
931     case MenuMgr::LeEditMenu:
932         menu.CreateMenu(true, false);
933         menu.AppendItem(EX_ID(ID_LYRIC_INSERT_TAG), IconMgr::IconType::IT_Le_Tag_Insert, L"F8");
934         menu.AppendItem(EX_ID(ID_LYRIC_REPLACE_TAG), IconMgr::IconType::IT_Le_Tag_Replace, L"F9");
935         menu.AppendItem(EX_ID(ID_LYRIC_DELETE_TAG), IconMgr::IconType::IT_Le_Tag_Delete, L"F10");
936         menu.AppendSeparator();
937         menu.AppendItem(EX_ID(ID_LYRIC_FIND), IconMgr::IconType::IT_Le_Find, L"Ctrl+F");
938         menu.AppendItem(EX_ID(ID_LYRIC_REPLACE), IconMgr::IconType::IT_Le_Replace, L"Ctrl+H");
939         menu.AppendItem(EX_ID(ID_FIND_NEXT), IconMgr::IconType::IT_NO_ICON, L"F3");
940         menu.AppendSeparator();
941         menu.AppendSubMenu(LeEditChConvMenu);
942         menu.AppendSeparator();
943         menu.AppendItem(EX_ID(ID_LRYIC_MERGE_SAME_TIME_TAG));
944         menu.AppendItem(EX_ID(ID_LYRIC_SWAP_TEXT_AND_TRANSLATION));
945         menu.AppendSubMenu(LeEditTagDislocMenu);
946         menu.AppendSubMenu(LeEditTranslateFormatConvertMenu);
947         break;
948     case MenuMgr::LeEditChConvMenu:
949         menu.CreateMenu(true, false);
950         menu.AppendItem(EX_ID(ID_LE_TRANSLATE_TO_SIMPLIFIED_CHINESE));
951         menu.AppendItem(EX_ID(ID_LE_TRANSLATE_TO_TRANDITIONAL_CHINESE));
952         break;
953     case MenuMgr::LeEditTagDislocMenu:
954         menu.CreateMenu(true, false);
955         menu.AppendItem(EX_ID(ID_LYRIC_TIME_TAG_FORWARD));
956         menu.AppendItem(EX_ID(ID_LYRIC_TIME_TAG_DELAY));
957         break;
958     case MenuMgr::LeEditTranslateFormatConvertMenu:
959         menu.CreateMenu(true, false);
960         menu.AppendItem(EX_ID(ID_LYRIC_AND_TRANSLATION_IN_SAME_LINE));
961         menu.AppendItem(EX_ID(ID_LYRIC_AND_TRANSLATION_IN_DIFFERENT_LINE));
962         break;
963     case MenuMgr::LePlayCtrlMenu:
964         menu.CreateMenu(true, false);
965         menu.AppendItem(EX_ID(ID_PLAY_PAUSE), IconMgr::IconType::IT_Play_Pause, L"Ctrl+P");
966         menu.AppendItem(EX_ID(ID_REW), IconMgr::IconType::IT_Rewind, CAcceleratorRes::Key(VK_LEFT, true).ToString().c_str());
967         menu.AppendItem(EX_ID(ID_FF), IconMgr::IconType::IT_Fast_Forward, CAcceleratorRes::Key(VK_RIGHT, true).ToString().c_str());
968         menu.AppendItem(EX_ID(ID_SEEK_TO_CUR_LINE), IconMgr::IconType::IT_Locate, L"Ctrl+G");
969         break;
970     case MenuMgr::FcListMenu:
971         menu.CreateMenu(true, false);
972         menu.AppendItem(EX_ID(ID_ADD_FILE), IconMgr::IconType::IT_Add);
973         menu.AppendItem(EX_ID(ID_CLEAR_LIST));
974         menu.AppendSeparator();
975         menu.AppendItem(EX_ID(ID_EDIT_TAG_INFO), IconMgr::IconType::IT_Edit);
976         menu.AppendItem(EX_ID(ID_DELETE_SELECT), IconMgr::IconType::IT_Cancel);
977         menu.AppendSeparator();
978         menu.AppendItem(EX_ID(ID_MOVE_UP), IconMgr::IconType::IT_NO_ICON, CAcceleratorRes::Key(VK_UP, true).ToString().c_str());
979         menu.AppendItem(EX_ID(ID_MOVE_DOWN), IconMgr::IconType::IT_NO_ICON, CAcceleratorRes::Key(VK_DOWN, true).ToString().c_str());
980         break;
981     case MenuMgr::LdListMenu:
982         menu.CreateMenu(true, false);
983         menu.AppendItem(EX_ID(ID_LD_LYRIC_DOWNLOAD), IconMgr::IconType::IT_Download);
984         menu.SetDefaultItem();
985         menu.AppendItem(EX_ID(ID_LD_PREVIEW));
986         menu.AppendItem(EX_ID(ID_LD_LYRIC_SAVEAS), IconMgr::IconType::IT_Save_As);
987         menu.AppendSeparator();
988         menu.AppendItem(EX_ID(ID_LD_COPY_TITLE));
989         menu.AppendItem(EX_ID(ID_LD_COPY_ARTIST));
990         menu.AppendItem(EX_ID(ID_LD_COPY_ALBUM));
991         menu.AppendItem(EX_ID(ID_LD_COPY_ID));
992         menu.AppendSeparator();
993         menu.AppendItem(EX_ID(ID_LD_RELATE));
994         menu.AppendItem(EX_ID(ID_LD_VIEW_ONLINE), IconMgr::IconType::IT_Online);
995         break;
996     case MenuMgr::OptDlrcDefStyleMenu:
997         menu.CreateMenu(true, false);
998         menu.AppendItem(EX_ID(ID_LYRIC_DEFAULT_STYLE1));
999         menu.AppendItem(EX_ID(ID_LYRIC_DEFAULT_STYLE2));
1000         menu.AppendItem(EX_ID(ID_LYRIC_DEFAULT_STYLE3));
1001         menu.AppendSeparator();
1002         menu.AppendSubMenu(OptDlrcModDefStyleMenu);
1003         break;
1004     case MenuMgr::OptDlrcModDefStyleMenu:
1005         menu.CreateMenu(true, false);
1006         menu.AppendItem(EX_ID(ID_LYRIC_DEFAULT_STYLE1_MODIFY));
1007         menu.AppendItem(EX_ID(ID_LYRIC_DEFAULT_STYLE2_MODIFY));
1008         menu.AppendItem(EX_ID(ID_LYRIC_DEFAULT_STYLE3_MODIFY));
1009         menu.AppendSeparator();
1010         menu.AppendItem(EX_ID(ID_RESTORE_DEFAULT_STYLE));
1011         break;
1012     case MenuMgr::PropertyAdvMenu:
1013         menu.CreateMenu(true, false);
1014         menu.AppendItem(EX_ID(ID_COPY_TEXT));
1015         menu.AppendItem(EX_ID(ID_COPY_ALL_TEXT));
1016         break;
1017     case MenuMgr::PropertyCoverMenu:
1018         menu.CreateMenu(true, false);
1019         menu.AppendItem(EX_ID(ID_COVER_BROWSE), IconMgr::IconType::IT_Folder_Explore);
1020         menu.AppendItem(EX_ID(ID_COVER_DELETE), IconMgr::IconType::IT_Cancel);
1021         menu.AppendItem(EX_ID(ID_COVER_SAVE_AS), IconMgr::IconType::IT_Save_As);
1022         menu.AppendItem(EX_ID(ID_COMPRESS_SIZE));
1023         break;
1024     case MenuMgr::FindListMenu:
1025         menu.CreateMenu(true, false);
1026         menu.AppendItem(EX_ID(ID_PLAY_ITEM), IconMgr::IconType::IT_Play);
1027         menu.SetDefaultItem();
1028         menu.AppendItem(EX_ID(ID_COPY_TEXT), IconMgr::IconType::IT_Copy);
1029         menu.AppendSeparator();
1030         menu.AppendItem(EX_ID(ID_VIEW_IN_MEDIA_LIB), IconMgr::IconType::IT_Media_Lib);
1031         menu.AppendItem(EX_ID(ID_LIB_RECENT_PLAYED_ITEM_PROPERTIES), IconMgr::IconType::IT_Info);
1032         break;
1033     default:
1034         ASSERT(false);                  // 参数错误或缺少case或缺少break
1035         menu.CreateMenu(true, true);    // 创建一个空的弹出菜单占位
1036         break;
1037     }
1038 }
1039