xref: /MusicPlayer2/MusicPlayer2/MusicPlayerDlg.h (revision 64f8684d70cda941271c774ecdb3cdaaf0c018ba)
1 
2 // MusicPlayerDlg.h : 头文件
3 //
4 
5 #pragma once
6 #include"PlayListCtrl.h"
7 #include "FindContainerDlg.h"
8 #include"OptionsDlg.h"
9 #include"PropertyDlg.h"
10 #include"ColorConvert.h"
11 #include"MiniModeDlg.h"
12 #include"LyricEditDlg.h"
13 #include "LyricDownloadDlg.h"
14 #include "LyricBatchDownloadDlg.h"
15 #include "SoundEffectDlg.h"
16 #include "CortanaLyric.h"
17 #include "FilePathHelper.h"
18 #include "CoverDownloadCommon.h"
19 #include "CoverDownloadDlg.h"
20 #include "FormatConvertDlg.h"
21 #include "CNotifyIcon.h"
22 #include "StaticEx.h"
23 #include "CMainDialogBase.h"
24 #include "CFloatPlaylistDlg.h"
25 #include "CMediaLibDlg.h"
26 #include "DesktopLyric.h"
27 #include "SearchEditCtrl.h"
28 #include "UIWindow.h"
29 #include "CDevicesManager.h"
30 #include "MenuEditCtrl.h"
31 #include "HorizontalSplitter.h"
32 #include "powrprof.h"
33 #include "CHotkeyManager.h"
34 #include "ListCache.h"
35 
36 #define WM_ALBUM_COVER_DOWNLOAD_COMPLETE (WM_USER+114)		//自动下载专辑封面和歌词完成时发出的消息
37 
38 // CMusicPlayerDlg 对话框
39 class CMusicPlayerDlg : public CMainDialogBase
40 {
41 
42     // 构造
43 public:
44     CMusicPlayerDlg(wstring cmdLine = wstring(), CWnd* pParent = NULL);	// 标准构造函数
45     ~CMusicPlayerDlg();
46 
47     static CMusicPlayerDlg* GetInstance();
48 
GetAccel()49     HACCEL GetAccel() const { return m_hAccel; }
GetCortanaLyric()50     CCortanaLyric& GetCortanaLyric() { return m_cortana_lyric; }
51 
52     friend class CMusicPlayerCmdHelper;
53     friend class CUIWindow;
54     friend class CPlayerUIBase;
55 
GetUIWindow()56     CUIWindow& GetUIWindow() { return m_ui_static_ctrl; }
57     bool IsMiniMode() const;
58     CMiniModeDlg* GetMinimodeDlg();
59     void UiForceRefresh();      //通知UI线程强制刷新一次
60 
61     // 对话框数据
62 #ifdef AFX_DESIGN_TIME
63     enum { IDD = IDD_MUSICPLAYER2_DIALOG };
64 #endif
65 
66 protected:
67     virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持
68 
69 public:
70     CMenu* m_pCurMenu{};       //当前弹出的菜单
71 
72     // 为主窗口停靠播放列表部分控件显示缓存当前ListItem,与控件显示状态应总是保持同步
73     // 主线程可以从这里取得当前ListItem,***限制此对象仅能在主线程使用***
74     CListCache m_current_cache;
75     // 为“最近播放”菜单缓存ListItem,总是与MenuMgr::RecentFolderPlaylistMenu一致
76     // 主线程可以从这里获取此菜单当前内容数据,***限制此对象仅能在主线程使用***
77     CListCache m_recent_cache;
78 
79 protected:
80     HICON m_hIcon;
81     //控件变量
82 
83     CUIWindow m_ui_static_ctrl{ m_pUI };
84     CHorizontalSplitter m_splitter_ctrl;
85     CStaticEx m_path_static;
86     CMenuEditCtrl m_path_edit;
87     CButton m_media_lib_button;
88     CSearchEditCtrl m_search_edit;
89     CPlayerToolBar m_playlist_toolbar;
90     //播放列表控件(初始化时通过构造函数传递歌曲信息的引用,用于支持鼠标指向列表中的项目时显示歌曲信息)
91     CPlayListCtrl m_playlist_list{ CPlayer::GetInstance().GetPlayList() };
92 
93     CToolTipCtrl m_tool_tip;
94 
95 #ifndef COMPILE_IN_WIN_XP
96     THUMBBUTTON m_thumbButton[3]{};
97 #endif
98 
99     CHotkeyManager m_hot_key;
100     CFindContainerDlg m_findDlg;		//查找对话框
101     HACCEL m_hAccel{};
102 
103     wstring m_cmdLine;	//命令行参数
104     std::mutex m_cmd_open_files_mutx;   // 保护m_cmd_open_files的线程同步对象
105     vector<wstring> m_cmd_open_files;   // 来自命令行/copy_data的待打开文件队列
106 
107     CDC* m_pUiDC;				//当前窗口的DC
108     std::vector<std::shared_ptr<CPlayerUIBase>> m_ui_list;      //保存每个界面类的指针
109     IPlayerUI* m_pUI = nullptr; //指向当前显示的界面类
110 
111     bool m_first_start{ true };		//初始时为true,在定时器第一次启动后置为flase
112 
113     int m_window_width;		//窗口的宽度
114     int m_window_height;	//窗口的高度
115     CPoint m_desktop_lyric_pos{ -1, -1 };     //桌面歌词窗口的位置
116     CSize m_desktop_lyric_size{ 0, 0 };
117     int m_part_static_width{ theApp.DPI(32) };              // 这里的值是最小宽度,窗口init时会根据文字变大
118     int m_medialib_btn_width{ theApp.DPI(64) };             // 这里的值是最小宽度,窗口init时会根据文字变大
119 
120     SLayoutData m_layout;		//窗口布局的固定数据
121 
122     bool m_searched;		//播放列表是否处于搜索状态
123 
124     unsigned int m_timer_count{};
125     unsigned int m_one_sec_timer_counter{};
126 
127     int m_item_selected{ -1 };		//播放列表中鼠标选中的项目
128     vector<int> m_items_selected;
129     int m_tab_selected{};		//选项设置中选择的标签
130 
131     CMiniModeDlg m_miniModeDlg{ m_item_selected, m_items_selected };		//迷你模式对话框
132 
133     CCortanaLyric m_cortana_lyric;		//用于显示Cortana歌词
134     CDesktopLyric m_desktop_lyric;		//桌面歌词
135 
136     CLyricEditDlg* m_pLyricEdit;		//歌词编辑对话框(非模态对话框)
137     CLyricBatchDownloadDlg* m_pLyricBatchDownDlg;	//歌词批量下载对话框(非模态对话框)
138     CMediaLibDlg* m_pMediaLibDlg;		//媒体库对话框(非模态对话框)
139     CSoundEffectDlg* m_pSoundEffecDlg;		//音效设定对话框(非模态对话框)
140     CFormatConvertDlg* m_pFormatConvertDlg;		//格式转换对话框(非模态对话框)
141     CFloatPlaylistDlg* m_pFloatPlaylistDlg;		//浮动播放列表对话框
142     CPoint m_float_playlist_pos{ INT_MAX, INT_MAX };				//浮动播放列表的位置
143 
144     CWinThread* m_pThread;		//执行在线查看的线程
145     static UINT ViewOnlineThreadFunc(LPVOID lpParam);	//执行在线查看的线程函数
146 
147     CWinThread* m_pDownloadThread;		//执行自动下载歌词和专辑封面的线程
148     static UINT DownloadLyricAndCoverThreadFunc(LPVOID lpParam);	//执行自动下载歌词和专辑封面的线程函数
149 
150     CWinThread* m_uiThread;         //主界面绘图的线程
151     static UINT UiThreadFunc(LPVOID lpParam);   //主界面绘图的线程函数
152 
153     struct UIThreadPara
154     {
155         bool draw_reset{ false };               //主界面绘图需要重置
156         bool ui_thread_exit{ false };           //指示线程退出
157         bool ui_force_refresh{ false };         //指示主界面强制重绘
158         bool search_box_force_refresh{ false }; //指示搜索框界面强制重绘
159         bool is_active_window{ false };         //指示当前窗口是否为激活窗口
160         bool is_completely_covered{ false };    //指示当前激活的窗口是否完全覆盖主界面
161     };
162     UIThreadPara m_ui_thread_para{};
163 
164     int m_play_error_cnt{};		//统计播放出错的次数
165     int m_fps_cnt{};            //用于统计当前帧率
166 
167     CNotifyIcon m_notify_icon;
168 
169     bool m_theme_color_changed{ false };
170 
171     CDevicesManager* devicesManager;
172 
173     static DEVICE_NOTIFY_CALLBACK_ROUTINE DeviceNotifyCallbackRoutine;
174     HPOWERNOTIFY RegistrationHandle;
175 
176     // 来自https://www.jianshu.com/p/9d4b68cdbd99
177     struct Monitors
178     {
179         std::vector<MONITORINFO> monitorinfos;
180 
MonitorEnumMonitors181         static BOOL CALLBACK MonitorEnum(HMONITOR hMon, HDC hdc, LPRECT lprcMonitor, LPARAM pData)
182         {
183             MONITORINFO iMonitor;
184             iMonitor.cbSize = sizeof(MONITORINFO);
185             GetMonitorInfo(hMon, &iMonitor);
186 
187             Monitors* pThis = reinterpret_cast<Monitors*>(pData);
188             pThis->monitorinfos.push_back(iMonitor);
189             return TRUE;
190         }
191 
MonitorsMonitors192         Monitors()
193         {
194             EnumDisplayMonitors(0, 0, MonitorEnum, (LPARAM)this);
195         }
196     };
197 
198 private:
199     void SaveConfig();		//保存设置到ini文件
200     void LoadConfig();		//从ini文件读取设置
201     void SetTransparency();			//根据m_transparency的值设置窗口透明度
202     void SetDesptopLyricTransparency();
203     void DrawInfo(bool reset = false);		//绘制信息
204     void SetPlaylistSize(int cx, int cy, int playlist_width);		//设置播放列表的大小
205     void SetDrawAreaSize(int cx, int cy, int playlist_width);
206     void SetAlwaysOnTop();
207     void AdjustVolume(int step);
208 
209     bool IsMainWindowPopupMenu() const;      //当前弹出的右键是主窗口右键菜单还是播放列表右键菜单
210 
211     static int CalculatePlaylistWidth(int client_width);
212 
213 public:
214     void ShowPlayList(bool highlight_visible = true);
215     void SetMenuState(CMenu* pMenu);
216     void SetPlaylistSelected(const vector<int>& indexes);
217     void SetUiPlaylistSelected(int index);
218 
219     static bool IsPointValid(CPoint);
220     int UpdatePlaylistCtrlPosition(CWnd* pParent, CWnd* pStatic, CWnd* pEdit);     //更新播放列表上方的CStatic和CEdit控件的大小和位置,返回CStatic的宽度
GetPathStaticWidth()221     int GetPathStaticWidth() const { return m_part_static_width; }
222 
223 protected:
224     void SetPlayListColor(bool highlight_visible = true);
225     void SwitchTrack();		//当切换正在播放的歌曲时的处理
226     void UpdateSongInfoToolTip();
227     void SetPlaylistVisible();
228     void SetMenubarVisible();
229 
230     // 初始化程序任务栏信息,窗口创建后以及窗口SW_HIDE后恢复时调用
231     void TaskBarInit();
232 
233     // 更新任务栏按钮上的播放进度与进度指示的颜色,平时由主定时器调用以保持进度更新
234     void UpdateTaskBarProgress(bool force = false) const;
235     // 根据当前播放状态更新“播放/暂停”按钮上的文字和图标(以及任务栏图标角标&按钮状态)
236     void UpdatePlayPauseButton();
237     // 设置任务栏缩略图的区域
238     void TaskBarSetClipArea(CRect rect);
239 
240     void EnablePlaylist(bool enable);		//设置启用或禁用播放列表控件
241 
242     void FirstRunCreateShortcut();            // 如果是首次运行那么提示用户是否创建桌面快捷方式
243 
244     void ApplySettings(const COptionsDlg& optionDlg);		//从选项设置对话框获取设置
245     void ApplyThemeColor();			//应用主题颜色设置
246 
247     void ThemeColorChanged();
248 
249 
250     void ShowFloatPlaylist();
251     void HideFloatPlaylist();
252 
253     void ShowHidePlaylist();
254     void ShowHideFloatPlaylist();
255 
256     void GetPlaylistItemSelected(int cur_index);
257     void GetPlaylistItemSelected();
258     void IniPlaylistPopupMenu();        //初始化所有右键菜单中的“添加到播放列表”子菜单
259     void InitUiMenu();                  //初始化所有“切换界面”子菜单
260 
261     void SetPlaylistDragEnable();       //设置播放列表是事允许拖动排序
262 
263     void _OnOptionSettings(CWnd* pParent);
264 
265     void DoLyricsAutoSave(bool no_inquiry = false);		//保存未修改的歌词,如果no_inquiry为true,则不弹出提示信息
266     void UpdateABRepeatToolTip();
267 
268     void LoadDefaultBackground();
269 
270     void SelectUi(int ui_selected);
271     int GetUiSelected() const;
272     CPlayerUIBase* GetCurrentUi();
273 
274     void GetScreenInfo();
275     void MoveDesktopLyricWindowPos();
276 
277     bool IsFloatPlaylistExist();
278     bool MoveFloatPlaylistPos();
279 
280     void SaveUiData();
281     void LoadUiData();
282 
283     static void OnSplitterChanged(CRect splitter_rect);
284 
285     // 生成的消息映射函数
286     virtual BOOL OnInitDialog();
287     afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
288     afx_msg void OnPaint();
289     afx_msg HCURSOR OnQueryDragIcon();
290     DECLARE_MESSAGE_MAP()
291 
292         afx_msg void OnSize(UINT nType, int cx, int cy);
293     afx_msg void OnTimer(UINT_PTR nIDEvent);
294     afx_msg void OnPlayPause();
295     afx_msg void OnPlay();
296     afx_msg void OnPause();
297     afx_msg void OnStop();
298     afx_msg void OnPrevious();
299     afx_msg void OnNext();
300     afx_msg void OnRew();
301     afx_msg void OnFF();
302     afx_msg void OnMediaLib();
303     afx_msg void OnFind();
304     afx_msg void OnExplorePath();
305     virtual BOOL PreTranslateMessage(MSG* pMsg);
306     afx_msg void OnDestroy();
307     afx_msg void OnAppAbout();
308     afx_msg void OnFileOpen();
309     afx_msg void OnFileOpenFolder();
310 public:
311     afx_msg void OnDropFiles(HDROP hDropInfo);
312 protected:
313     afx_msg void OnInitMenu(CMenu* pMenu);
314     afx_msg void OnRepeatMode();
315     afx_msg void OnPlayOrder();
316     afx_msg void OnPlayShuffle();
317     afx_msg void OnLoopPlaylist();
318     afx_msg void OnLoopTrack();
319     afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
320     //afx_msg void OnBnClickedVolumeUp();
321     //afx_msg void OnBnClickedVolumeDown();
322     afx_msg void OnGetMinMaxInfo(MINMAXINFO* lpMMI);
323     afx_msg void OnNMDblclkPlaylistList(NMHDR* pNMHDR, LRESULT* pResult);
324     //afx_msg void OnRefreshPlaylist();
325     afx_msg void OnOptionSettings();
326     afx_msg void OnReloadPlaylist();
327     afx_msg void OnNMRClickPlaylistList(NMHDR* pNMHDR, LRESULT* pResult);
328     afx_msg void OnPlayItem();
329     afx_msg void OnItemProperty();
330     //afx_msg void OnRemoveFromPlaylist();
331 //	afx_msg void OnClearPlaylist();
332     afx_msg void OnExploreTrack();
333     virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
334     afx_msg void OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2);
335     //afx_msg void OnStnClickedProgressStatic();
336     afx_msg void OnReIniBass();
337     afx_msg void OnSortByFile();
338     afx_msg void OnSortByPath();
339     afx_msg void OnSortByTitle();
340     afx_msg void OnSortByArtist();
341     afx_msg void OnSortByAlbum();
342     afx_msg void OnSortByTrack();
343     afx_msg void OnSortByListenTime();
344     afx_msg void OnSortByModifiedTime();
345 public:
346     afx_msg void OnDeleteFromDisk();
347 protected:
348     afx_msg LRESULT OnTaskbarcreated(WPARAM wParam, LPARAM lParam);
349 public:
350     afx_msg void OnDispFileName();
351     afx_msg void OnDispTitle();
352     afx_msg void OnDispArtistTitle();
353     afx_msg void OnDispTitleArtist();
354     afx_msg void OnMiniMode();
355 
356     afx_msg void OnReloadLyric();
357     afx_msg void OnSongInfo();
358     afx_msg void OnCopyCurrentLyric();
359     afx_msg void OnCopyAllLyric();
360     afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
361     afx_msg void OnLyricForward();
362     afx_msg void OnLyricDelay();
363     afx_msg void OnSaveModifiedLyric();
364     afx_msg void OnEditLyric();
365     afx_msg void OnDownloadLyric();
366     afx_msg void OnLyricBatchDownload();
367     afx_msg void OnDeleteLyric();
368     afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
369     afx_msg void OnMouseMove(UINT nFlags, CPoint point);
370     afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
371     afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
372 protected:
373     afx_msg LRESULT OnPlaylistIniComplate(WPARAM wParam, LPARAM lParam);
374     afx_msg LRESULT OnAfterSetTrack(WPARAM wParam, LPARAM lParam);
375 public:
376     afx_msg void OnEqualizer();
377     afx_msg void OnExploreOnline();
378 protected:
379     afx_msg LRESULT OnPlaylistIniStart(WPARAM wParam, LPARAM lParam);
380 public:
381     afx_msg void OnBrowseLyric();
382     afx_msg void OnTranslateToSimplifiedChinese();
383     afx_msg void OnTranslateToTranditionalChinese();
384     afx_msg void OnAlbumCoverSaveAs();
385 protected:
386     afx_msg LRESULT OnConnotPlayWarning(WPARAM wParam, LPARAM lParam);
387 public:
388     afx_msg void OnEnChangeSearchEdit();
389     //afx_msg void OnBnClickedClearSearchButton();
390     afx_msg void OnDownloadAlbumCover();
391 protected:
392     afx_msg LRESULT OnPostMusicStreamOpened(WPARAM wParam, LPARAM lParam);
393     afx_msg LRESULT OnMusicStreamOpened(WPARAM wParam, LPARAM lParam);
394 public:
395     afx_msg void OnCurrentExploreOnline();
396     afx_msg void OnDeleteAlbumCover();
397     afx_msg void OnCopyFileTo();
398     afx_msg void OnMoveFileTo();
399     afx_msg void OnFormatConvert();
400     afx_msg void OnFormatConvert1();
401 protected:
402     afx_msg LRESULT OnSettingsApplied(WPARAM wParam, LPARAM lParam);
403     afx_msg LRESULT OnAlbumCoverDownloadComplete(WPARAM wParam, LPARAM lParam);
404 public:
405     afx_msg void OnColorizationColorChanged(DWORD dwColorizationColor, BOOL bOpacity);
406     afx_msg void OnSupportedFormat();
407     afx_msg void OnSwitchUi();
408     afx_msg void OnVolumeUp();
409     afx_msg void OnVolumeDown();
410 protected:
411     afx_msg LRESULT OnNotifyicon(WPARAM wParam, LPARAM lParam);
412 public:
413     afx_msg void OnClose();
414     virtual void OnCancel();
415     afx_msg void OnMenuExit();
416     afx_msg void OnMinimodeRestore();
417     afx_msg void OnAppCommand(CWnd* pWnd, UINT nCmd, UINT nDevice, UINT nKey);
418     afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
419     afx_msg void OnShowPlaylist();
420     afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
421     afx_msg void OnMouseLeave();
422     afx_msg void OnShowMenuBar();
423     afx_msg void OnFullScreen();
424     afx_msg void OnCreatePlayShortcut();
425     afx_msg void OnListenStatistics();
426     afx_msg void OnDarkMode();
427 protected:
428     afx_msg LRESULT OnMainMenuPopup(WPARAM wParam, LPARAM lParam);
429 public:
430     afx_msg void OnAlwaysOnTop();
431     afx_msg void OnFloatPlaylist();
432     afx_msg void OnDockedPlaylist();
433     afx_msg void OnFloatedPlaylist();
434     afx_msg LRESULT OnFloatPlaylistClosed(WPARAM wParam, LPARAM lParam);
435     afx_msg void OnPlaylistAddFile();
436     afx_msg void OnRemoveFromPlaylist();
437     afx_msg void OnEmptyPlaylist();
438     afx_msg void OnMovePlaylistItemUp();
439     afx_msg void OnMovePlaylistItemDown();
440     afx_msg void OnNMClickPlaylistList(NMHDR* pNMHDR, LRESULT* pResult);
441     afx_msg void OnRemoveSameSongs();
442     afx_msg void OnAddToNewPlaylist();
443     afx_msg void OnToolFileRelate();
444     afx_msg void OnPlaylistAddFolder();
445     afx_msg void OnRemoveInvalidItems();
446 protected:
447     afx_msg LRESULT OnListItemDragged(WPARAM wParam, LPARAM lParam);
448 public:
449     afx_msg void OnAddRemoveFromFavourite();
450     afx_msg void OnFileOpenUrl();
451     afx_msg void OnPlaylistAddUrl();
452 protected:
453     afx_msg LRESULT OnSetMenuState(WPARAM wParam, LPARAM lParam);
454 public:
455     afx_msg void OnLockDesktopLryic();
456     afx_msg void OnCloseDesktopLyric();
457     afx_msg void OnLyricDisplayedDoubleLine();
458     afx_msg void OnLyricBackgroundPenetrate();
459     afx_msg void OnPlaylistSelectChange();
460     afx_msg void OnPlaylistSelectAll();
461     afx_msg void OnPlaylistSelectNone();
462     afx_msg void OnPlaylistSelectRevert();
463 protected:
464     afx_msg LRESULT OnCurPlaylistRenamed(WPARAM wParam, LPARAM lParam);
465 public:
466     afx_msg void OnOnlineHelp();
467     afx_msg void OnSpeedUp();
468     afx_msg void OnSlowDown();
469     afx_msg void OnOriginalSpeed();
470     afx_msg void OnPitchUp();
471     afx_msg void OnPitchDown();
472     afx_msg void OnOriginalPitch();
473 protected:
474     afx_msg LRESULT OnSearchEditBtnClicked(WPARAM wParam, LPARAM lParam);
475     afx_msg LRESULT OnInitAddToMenu(WPARAM wParam, LPARAM lParam);
476     afx_msg LRESULT OnMsgOptionSettings(WPARAM wParam, LPARAM lParam);
477 public:
478     afx_msg void OnAlwaysShowStatusBar();
479     afx_msg void OnShowMainWindow();
480 protected:
481     afx_msg LRESULT OnRecentPlayedListCleared(WPARAM wParam, LPARAM lParam);
482 public:
483     afx_msg void OnAbRepeat();
484     afx_msg void OnSetAPoint();
485     afx_msg void OnSetBPoint();
486     afx_msg void OnResetAbRepeat();
487     afx_msg void OnNextAbRepeat();
488     afx_msg void OnSaveCurrentPlaylistAs();
489     afx_msg void OnFileOpenPlaylist();
490     //afx_msg void OnExportCurrentPlaylist();
491     afx_msg void OnSaveAsNewPlaylist();
492     afx_msg void OnCreateDesktopShortcut();
493     afx_msg void OnCreateMiniModeShortCut();
494     afx_msg void OnRemoveCurrentFromPlaylist();
495     afx_msg void OnDeleteCurrentFromDisk();
496     afx_msg BOOL OnQueryEndSession();
497     afx_msg void OnAlwaysUseExternalAlbumCover();
498     afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);
499     afx_msg void OnRelateLocalLyric();
500     afx_msg void OnAlbumCoverInfo();
501     afx_msg void OnUnlinkLyric();
502     afx_msg void OnShowDesktopLyric();
503 protected:
504     afx_msg LRESULT OnMainWindowActivated(WPARAM wParam, LPARAM lParam);
505 public:
506     afx_msg void OnContainSubFolder();
507 protected:
508     afx_msg LRESULT OnGetMusicCurrentPosition(WPARAM wParam, LPARAM lParam);
509 public:
510     afx_msg void OnPlayRandom();
511 protected:
512     afx_msg LRESULT OnCurrentFileAlbumCoverChanged(WPARAM wParam, LPARAM lParam);
513 public:
514     afx_msg void OnRename();
515     afx_msg void OnEmbedLyricToAudioFile();
516     afx_msg void OnDeleteLyricFromAudioFile();
517 protected:
518     afx_msg LRESULT OnAfterMusicStreamClosed(WPARAM wParam, LPARAM lParam);
519 public:
520     afx_msg void OnPlayTrack();
521     afx_msg void OnShowLyricTranslate();
522     afx_msg void OnViewArtist();
523     afx_msg void OnViewAlbum();
524     afx_msg void OnLocateToCurrent();
525     afx_msg void OnUseStandardTitleBar();
526     void ApplyShowStandardTitlebar();
527 protected:
528     afx_msg LRESULT OnReInitBassContinuePlay(WPARAM wParam, LPARAM lParam);
529     afx_msg LRESULT OnDisplaychange(WPARAM wParam, LPARAM lParam);
530 public:
531     afx_msg void OnWindowPosChanging(WINDOWPOS* lpwndpos);
532     afx_msg void OnWindowPosChanged(WINDOWPOS* lpwndpos);
533     afx_msg void OnPlaylistViewArtist();
534     afx_msg void OnPlaylistViewAlbum();
535 protected:
536     afx_msg LRESULT OnVolumeChanged(WPARAM wParam, LPARAM lParam);
537 public:
538     afx_msg void OnPlaylistOptions();
539     afx_msg void OnMove(int x, int y);
540 
541 protected:
542     afx_msg LRESULT OnRecentFolderOrPlaylistChanged(WPARAM wParam, LPARAM lParam);
543 public:
544     afx_msg void OnPlayAsNext();
545     afx_msg void OnPlaylistFixPathError();
546     afx_msg UINT OnPowerBroadcast(UINT nPowerEvent, LPARAM nEventData);
547 protected:
548     afx_msg LRESULT OnSetUiForceFreshFlag(WPARAM wParam, LPARAM lParam);
549     afx_msg void OnMoreRecentItems();
550 public:
551     afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp);
552 protected:
553     afx_msg LRESULT OnClearUiSerchBox(WPARAM wParam, LPARAM lParam);
554 };
555