11a8d5ccbSlrisora #pragma once 21a8d5ccbSlrisora class IconMgr 31a8d5ccbSlrisora { 41a8d5ccbSlrisora public: 51a8d5ccbSlrisora IconMgr(); 61a8d5ccbSlrisora virtual ~IconMgr(); 71a8d5ccbSlrisora 81a8d5ccbSlrisora enum IconType 9b2ba5e1dSlrisora { // 命名以其(点击时的)功能为准 101a8d5ccbSlrisora IT_App, // 应用图标 11b2ba5e1dSlrisora IT_App_Monochrome, // 应用图标(单色) 121a8d5ccbSlrisora IT_Stop, // 停止 131a8d5ccbSlrisora IT_Play, // 播放 141a8d5ccbSlrisora IT_Pause, // 暂停 151a8d5ccbSlrisora IT_Play_Pause, // 播放/暂停 161a8d5ccbSlrisora IT_Previous, // 上一曲 171a8d5ccbSlrisora IT_Next, // 下一曲 181a8d5ccbSlrisora IT_Favorite_On, // 添加到我喜欢的音乐(空心♥) 191a8d5ccbSlrisora IT_Favorite_Off, // 从我喜欢的音乐移除(实心♥) 201a8d5ccbSlrisora IT_Media_Lib, // 媒体库 211a8d5ccbSlrisora IT_Playlist, // 播放列表 221a8d5ccbSlrisora 231a8d5ccbSlrisora IT_Menu, // 菜单 241a8d5ccbSlrisora IT_Full_Screen_On, // 进入全屏 251a8d5ccbSlrisora IT_Full_Screen_Off, // 退出全屏 261a8d5ccbSlrisora IT_Minimize, // 最小化 271a8d5ccbSlrisora IT_Maxmize_On, // 进入最大化 281a8d5ccbSlrisora IT_Maxmize_Off, // 退出最大化 291a8d5ccbSlrisora IT_Close, // 关闭 301a8d5ccbSlrisora 311a8d5ccbSlrisora IT_Play_Order, // 顺序播放 321a8d5ccbSlrisora IT_Loop_Playlist, // 列表循环 33b2ba5e1dSlrisora IT_Loop_Track, // 单曲循环 341a8d5ccbSlrisora IT_Play_Shuffle, // 无序播放 351a8d5ccbSlrisora IT_Play_Random, // 随机播放 361a8d5ccbSlrisora IT_Play_Track, // 单曲播放 371a8d5ccbSlrisora IT_Setting, // 设置 381a8d5ccbSlrisora IT_Equalizer, // 均衡器 391a8d5ccbSlrisora IT_Skin, // 切换界面(皮肤) 401a8d5ccbSlrisora IT_Mini_On, // 进入迷你模式 411a8d5ccbSlrisora IT_Mini_Off, // 退出迷你模式 421a8d5ccbSlrisora IT_Info, // 曲目信息 431a8d5ccbSlrisora IT_Find, // 查找歌曲 441a8d5ccbSlrisora IT_Dark_Mode_On, // 进入深色模式(月亮) 451a8d5ccbSlrisora IT_Dark_Mode_Off, // 退出深色模式(太阳) 461a8d5ccbSlrisora IT_Volume0, // 音量: 静音 471a8d5ccbSlrisora IT_Volume1, // 音量: ) 481a8d5ccbSlrisora IT_Volume2, // 音量: )) 491a8d5ccbSlrisora IT_Volume3, // 音量: ))) 501a8d5ccbSlrisora IT_Switch_Display, // 切换显示(xml界面堆栈元素) 511a8d5ccbSlrisora 521a8d5ccbSlrisora IT_Folder, // 文件夹 53b2ba5e1dSlrisora IT_Music, // 音符/打开文件 54b2ba5e1dSlrisora IT_Link, // 曲别针/链接 55b2ba5e1dSlrisora IT_Exit, // 退出 56b2ba5e1dSlrisora IT_Rewind, // 快退 57b2ba5e1dSlrisora IT_Fast_Forward, // 快进 58b2ba5e1dSlrisora IT_Speed_Up, // 加速播放 59b2ba5e1dSlrisora IT_Slow_Down, // 减速播放 60b2ba5e1dSlrisora IT_Add, // 添加 61b2ba5e1dSlrisora IT_Save, // 保存 62b2ba5e1dSlrisora IT_Save_As, // 另存为 63b2ba5e1dSlrisora IT_Sort_Mode, // 排序模式 64b2ba5e1dSlrisora IT_Playlist_Display_Mode, // 播放列表显示方式 651a8d5ccbSlrisora IT_Locate, // 定位 66b2ba5e1dSlrisora IT_Lyric, // 歌词 67b2ba5e1dSlrisora IT_Copy, // 复制 68b2ba5e1dSlrisora IT_Edit, // 编辑 69b2ba5e1dSlrisora IT_Unlink, // 取消关联 70b2ba5e1dSlrisora IT_Folder_Explore, // 文件夹浏览/搜索 71b2ba5e1dSlrisora IT_Internal_Lyric, // 内嵌歌词 72b2ba5e1dSlrisora IT_Download, // 下载 73b2ba5e1dSlrisora IT_Download_Batch, // 批量下载 74b2ba5e1dSlrisora IT_Playlist_Dock, // 停靠播放列表/视图 75b2ba5e1dSlrisora IT_Playlist_Float, // 浮动播放列表 76b2ba5e1dSlrisora IT_Pin, // 图钉/置顶 77b2ba5e1dSlrisora IT_Convert, // 格式转换 78b2ba5e1dSlrisora IT_Online, // 在线查看 79b2ba5e1dSlrisora IT_Shortcut, // 快捷方式 80b2ba5e1dSlrisora IT_Album_Cover, // 专辑封面 81b2ba5e1dSlrisora IT_Statistics, // 统计 82b2ba5e1dSlrisora IT_File_Relate, // 文件关联 83b2ba5e1dSlrisora IT_Help, // 帮助 84b2ba5e1dSlrisora IT_Fix, // 扳手/修复 85b2ba5e1dSlrisora IT_Star, // 星星/分级 86b2ba5e1dSlrisora IT_Artist, // 艺术家 87b2ba5e1dSlrisora IT_Album, // 专辑 88*ccb67e16Slrisora IT_Genre, // 流派 89*ccb67e16Slrisora IT_Year, // 年份 90*ccb67e16Slrisora IT_Bitrate, // 比特率 91*ccb67e16Slrisora IT_History, // 最近播放 92*ccb67e16Slrisora IT_Key_Board, // 快捷键 93*ccb67e16Slrisora IT_Reverb, // 混响 94b2ba5e1dSlrisora IT_Double_Line, // 双行 95b2ba5e1dSlrisora IT_Lock, // 锁/桌面歌词锁定 96b2ba5e1dSlrisora IT_Play_As_Next, // 下一首播放 97b2ba5e1dSlrisora IT_Rename, // 重命名 98b2ba5e1dSlrisora IT_Play_In_Playlist, // 添加到新播放列表并播放 99b2ba5e1dSlrisora IT_Play_In_Folder, // 在文件夹模式中播放 100a87de172Slrisora IT_Tag, // 标签 101b2ba5e1dSlrisora 102b2ba5e1dSlrisora IT_Le_Tag_Insert, // Le 插入时间标签 103b2ba5e1dSlrisora IT_Le_Tag_Replace, // Le 替换时间标签 104b2ba5e1dSlrisora IT_Le_Tag_Delete, // Le 删除时间标签 105b2ba5e1dSlrisora IT_Le_Save, // Le 保存 106b2ba5e1dSlrisora IT_Le_Find, // Le 文本查找 107b2ba5e1dSlrisora IT_Le_Replace, // Le 文本替换 1081a8d5ccbSlrisora 1091a8d5ccbSlrisora IT_Triangle_Left, // 向左三角形 1101a8d5ccbSlrisora IT_Triangle_Up, // 向上三角形 1111a8d5ccbSlrisora IT_Triangle_Right, // 向右三角形 1121a8d5ccbSlrisora IT_Triangle_Down, // 向下三角形 1131a8d5ccbSlrisora 114b2ba5e1dSlrisora IT_Ok, // 圆/确认 115b2ba5e1dSlrisora IT_Cancel, // 叉/取消 116b2ba5e1dSlrisora 117d0f66372Slrisora IT_Default_Cover_Playing, // 默认封面(播放中) 118d0f66372Slrisora IT_Default_Cover_Stopped, // 默认封面(已停止) 119d0f66372Slrisora 1201a8d5ccbSlrisora IT_NO_ICON, 1211a8d5ccbSlrisora }; 1221a8d5ccbSlrisora 1231a8d5ccbSlrisora enum IconStyle 1241a8d5ccbSlrisora { 1251a8d5ccbSlrisora IS_Auto, 1261a8d5ccbSlrisora IS_OutlinedDark, // 深色的图标(浅色模式用) 1271a8d5ccbSlrisora IS_OutlinedLight, // 浅色的图标(深色模式用) 1281a8d5ccbSlrisora IS_Filled, 1291a8d5ccbSlrisora IS_Color, 1301a8d5ccbSlrisora }; 1311a8d5ccbSlrisora 1321a8d5ccbSlrisora enum IconSize 1331a8d5ccbSlrisora { 1341a8d5ccbSlrisora IS_Default, // SM_CXICON * SM_CYICON 1351a8d5ccbSlrisora IS_DPI_16, 1361a8d5ccbSlrisora IS_DPI_16_Full_Screen, 1371a8d5ccbSlrisora IS_DPI_20, 1381a8d5ccbSlrisora IS_DPI_20_Full_Screen, 1391a8d5ccbSlrisora IS_DPI_32, 1401a8d5ccbSlrisora IS_DPI_32_Full_Screen, 1411a8d5ccbSlrisora IS_ORG_512, 1421a8d5ccbSlrisora }; 1431a8d5ccbSlrisora 144b2ba5e1dSlrisora // 获取需要的图标,不要在代码中大量直接调用 145b2ba5e1dSlrisora // 请为同类调用提供一层包装以免之后修改困难 1461a8d5ccbSlrisora HICON GetHICON(IconType type, IconStyle style = IS_Auto, IconSize size = IS_DPI_16); 1471a8d5ccbSlrisora 1481a8d5ccbSlrisora static CSize GetIconSize(IconSize size); 1491a8d5ccbSlrisora 1501a8d5ccbSlrisora private: 1511a8d5ccbSlrisora 1521a8d5ccbSlrisora int MakeKey(IconType type, IconStyle style, IconSize size) 1531a8d5ccbSlrisora { 1541a8d5ccbSlrisora ASSERT(style < 10 && size < 10); 1551a8d5ccbSlrisora return type * 100 + style * 10 + size; 1561a8d5ccbSlrisora } 1571a8d5ccbSlrisora std::tuple<UINT, UINT, UINT, UINT> GetIconID(IconType type); 1581a8d5ccbSlrisora 1591a8d5ccbSlrisora std::map<int, HICON> m_icon_map; 160b2ba5e1dSlrisora std::shared_mutex m_shared_mutex; // 线程同步对象 1611a8d5ccbSlrisora }; 1621a8d5ccbSlrisora 163