11a8d5ccbSlrisora #pragma once 21a8d5ccbSlrisora class IconMgr 31a8d5ccbSlrisora { 41a8d5ccbSlrisora public: 51a8d5ccbSlrisora IconMgr(); 6*965ce478Slrisora ~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, // 专辑 88ccb67e16Slrisora IT_Genre, // 流派 89ccb67e16Slrisora IT_Year, // 年份 90ccb67e16Slrisora IT_Bitrate, // 比特率 91ccb67e16Slrisora IT_History, // 最近播放 92ccb67e16Slrisora IT_Key_Board, // 快捷键 93ccb67e16Slrisora 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, // 标签 101eee872ffSZhong Yang IT_More, // 更多 1029a8a30ecSZhong Yang IT_NowPlaying, // 正在播放 10362221bbeSZhong Yang IT_Karaoke, // 歌词卡拉OK效果 104ac0c3168SZhong Yang IT_Refresh, // 刷新 105ac0c3168SZhong Yang IT_NewFolder, // 添加新文件夹 106b6e722e3Szhongyang219 IT_Background, // 背景穿透 107b2ba5e1dSlrisora 108b2ba5e1dSlrisora IT_Le_Tag_Insert, // Le 插入时间标签 109b2ba5e1dSlrisora IT_Le_Tag_Replace, // Le 替换时间标签 110b2ba5e1dSlrisora IT_Le_Tag_Delete, // Le 删除时间标签 111b2ba5e1dSlrisora IT_Le_Save, // Le 保存 112b2ba5e1dSlrisora IT_Le_Find, // Le 文本查找 113b2ba5e1dSlrisora IT_Le_Replace, // Le 文本替换 1141a8d5ccbSlrisora 1151a8d5ccbSlrisora IT_Triangle_Left, // 向左三角形 1161a8d5ccbSlrisora IT_Triangle_Up, // 向上三角形 1171a8d5ccbSlrisora IT_Triangle_Right, // 向右三角形 1181a8d5ccbSlrisora IT_Triangle_Down, // 向下三角形 1191a8d5ccbSlrisora 120b2ba5e1dSlrisora IT_Ok, // 圆/确认 121b2ba5e1dSlrisora IT_Cancel, // 叉/取消 122b2ba5e1dSlrisora 123ec3944bcSzhongyang219 IT_TreeCollapsed, // 折叠的树节点 124ec3944bcSzhongyang219 IT_TreeExpanded, // 展开的树节点 125ec3944bcSzhongyang219 126d0f66372Slrisora IT_Default_Cover_Playing, // 默认封面(播放中) 127d0f66372Slrisora IT_Default_Cover_Stopped, // 默认封面(已停止) 128d0f66372Slrisora 1291a8d5ccbSlrisora IT_NO_ICON, 1301a8d5ccbSlrisora }; 1311a8d5ccbSlrisora 1321a8d5ccbSlrisora enum IconStyle 1331a8d5ccbSlrisora { 1341a8d5ccbSlrisora IS_Auto, 1351a8d5ccbSlrisora IS_OutlinedDark, // 深色的图标(浅色模式用) 1361a8d5ccbSlrisora IS_OutlinedLight, // 浅色的图标(深色模式用) 1371a8d5ccbSlrisora IS_Filled, 1381a8d5ccbSlrisora IS_Color, 1391a8d5ccbSlrisora }; 1401a8d5ccbSlrisora 1411a8d5ccbSlrisora enum IconSize 1421a8d5ccbSlrisora { 14312ba7354Slrisora IS_DPI_16, 1441a8d5ccbSlrisora IS_DPI_16_Full_Screen, 1451a8d5ccbSlrisora IS_DPI_20, 1461a8d5ccbSlrisora IS_DPI_20_Full_Screen, 1471a8d5ccbSlrisora IS_DPI_32, 1481a8d5ccbSlrisora IS_DPI_32_Full_Screen, 1491a8d5ccbSlrisora IS_ORG_512, 15012ba7354Slrisora IS_ALL, 1511a8d5ccbSlrisora }; 1521a8d5ccbSlrisora 153b2ba5e1dSlrisora // 获取需要的图标,不要在代码中大量直接调用 154b2ba5e1dSlrisora // 请为同类调用提供一层包装以免之后修改困难 155bf0f421aSlrisora HICON GetHICON(IconType type, IconStyle style, IconSize size); 1561a8d5ccbSlrisora GetIconSize(IconSize size)15712ba7354Slrisora static CSize GetIconSize(IconSize size) 15812ba7354Slrisora { 15912ba7354Slrisora int width = GetIconWidth(size); 16012ba7354Slrisora return CSize(width, width); 16112ba7354Slrisora } 16212ba7354Slrisora static int GetIconWidth(IconSize size); 1631a8d5ccbSlrisora 1641a8d5ccbSlrisora private: 1651a8d5ccbSlrisora MakeKey(IconType type,IconStyle style,IconSize size)1661a8d5ccbSlrisora int MakeKey(IconType type, IconStyle style, IconSize size) 1671a8d5ccbSlrisora { 1681a8d5ccbSlrisora ASSERT(style < 10 && size < 10); 1691a8d5ccbSlrisora return type * 100 + style * 10 + size; 1701a8d5ccbSlrisora } 1711a8d5ccbSlrisora std::tuple<UINT, UINT, UINT, UINT> GetIconID(IconType type); 1721a8d5ccbSlrisora 1731a8d5ccbSlrisora std::map<int, HICON> m_icon_map; 174b2ba5e1dSlrisora std::shared_mutex m_shared_mutex; // 线程同步对象 1751a8d5ccbSlrisora }; 1761a8d5ccbSlrisora 177