19cffa0dfSzhongyang219 #pragma once 29cffa0dfSzhongyang219 #include "afxdialogex.h" 39cffa0dfSzhongyang219 #include "TabDlg.h" 49cffa0dfSzhongyang219 #include "ListCtrlEx.h" 59cffa0dfSzhongyang219 #include "SearchEditCtrl.h" 69cffa0dfSzhongyang219 #include "ListCache.h" 79cffa0dfSzhongyang219 89cffa0dfSzhongyang219 // CFindListDlg 对话框 99cffa0dfSzhongyang219 109cffa0dfSzhongyang219 class CFindListDlg : public CTabDlg 119cffa0dfSzhongyang219 { 129cffa0dfSzhongyang219 DECLARE_DYNAMIC(CFindListDlg) 139cffa0dfSzhongyang219 149cffa0dfSzhongyang219 public: 159cffa0dfSzhongyang219 CFindListDlg(CWnd* pParent = nullptr); // 标准构造函数 169cffa0dfSzhongyang219 virtual ~CFindListDlg(); 179cffa0dfSzhongyang219 189cffa0dfSzhongyang219 // 对话框数据 199cffa0dfSzhongyang219 #ifdef AFX_DESIGN_TIME 209cffa0dfSzhongyang219 enum { IDD = IDD_FIND_LIST_DIALOG }; 219cffa0dfSzhongyang219 #endif 229cffa0dfSzhongyang219 239cffa0dfSzhongyang219 private: 249cffa0dfSzhongyang219 enum COLUMN 259cffa0dfSzhongyang219 { 269cffa0dfSzhongyang219 COL_NAME, 279cffa0dfSzhongyang219 COL_TRACK_NUM, 289cffa0dfSzhongyang219 COL_MAX 299cffa0dfSzhongyang219 }; 309cffa0dfSzhongyang219 319cffa0dfSzhongyang219 CSearchEditCtrl m_search_edit; 32*800a68caSzhongyang219 33*800a68caSzhongyang219 //列表的来源 34*800a68caSzhongyang219 enum class ItemFrom 35*800a68caSzhongyang219 { 36*800a68caSzhongyang219 UNKNOWN, 37*800a68caSzhongyang219 RECENT_PLAYED, //最近播放 38*800a68caSzhongyang219 MEDIALIB_ITEM, //未播放过的媒体库项目 39*800a68caSzhongyang219 FOLDER_EXPLORE //“文件夹浏览”中未播放过的文件夹 40*800a68caSzhongyang219 }; 41*800a68caSzhongyang219 struct FindListItem 42*800a68caSzhongyang219 { 43*800a68caSzhongyang219 ListItem list_data; 44*800a68caSzhongyang219 ItemFrom item_from; 45*800a68caSzhongyang219 bool operator==(const ListItem& another_list_data) const 46*800a68caSzhongyang219 { 47*800a68caSzhongyang219 return list_data == another_list_data; 48*800a68caSzhongyang219 } 49*800a68caSzhongyang219 }; 50*800a68caSzhongyang219 std::vector<FindListItem> m_all_list_items; 519cffa0dfSzhongyang219 CListCtrlEx m_list_ctrl; 529cffa0dfSzhongyang219 CListCtrlEx::ListData m_list_data; // 列表数据 539cffa0dfSzhongyang219 CListCtrlEx::ListData m_list_data_searched; // 搜索后的列表数据 549cffa0dfSzhongyang219 vector<int> m_search_result; //保存搜索后的索引 559cffa0dfSzhongyang219 569cffa0dfSzhongyang219 bool m_searched{ false }; // 是否处于搜索状态 579cffa0dfSzhongyang219 bool m_initialized{ false }; 589cffa0dfSzhongyang219 599cffa0dfSzhongyang219 private: 609cffa0dfSzhongyang219 void InitListData(); 619cffa0dfSzhongyang219 virtual void OnTabEntered() override; 629cffa0dfSzhongyang219 639cffa0dfSzhongyang219 void AddListCacheData(const CListCache& list_cache); //向m_all_list_items中添加一个CListCache中的所有项目 649cffa0dfSzhongyang219 void AddMediaLibItem(CMediaClassifier::ClassificationType type); //向m_all_list_items中添加媒体库中指定类型的所有项目 65c1fa382bSzhongyang219 void AddAllFolders(); //向m_all_list_items中添加媒体库中所有文件夹 669cffa0dfSzhongyang219 679cffa0dfSzhongyang219 void ShowList(); 689cffa0dfSzhongyang219 void QuickSearch(const wstring& key_word); //根据关键字执行快速查找,将结果保存在m_list_data_searched中 699cffa0dfSzhongyang219 709cffa0dfSzhongyang219 //向父窗口发送消息以更新“播放选中”按钮的状态 719cffa0dfSzhongyang219 void SetPlaySelectedEnable(bool enable); 729cffa0dfSzhongyang219 73*800a68caSzhongyang219 FindListItem GetSelectedItem() const; 74*800a68caSzhongyang219 759cffa0dfSzhongyang219 protected: 769cffa0dfSzhongyang219 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 779cffa0dfSzhongyang219 789cffa0dfSzhongyang219 DECLARE_MESSAGE_MAP() 799cffa0dfSzhongyang219 public: 809cffa0dfSzhongyang219 virtual BOOL OnInitDialog(); 819cffa0dfSzhongyang219 virtual void OnOK(); 829cffa0dfSzhongyang219 protected: 839cffa0dfSzhongyang219 afx_msg LRESULT OnSearchEditBtnClicked(WPARAM wParam, LPARAM lParam); 849cffa0dfSzhongyang219 public: 859cffa0dfSzhongyang219 afx_msg void OnEnChangeSearchEdit(); 869cffa0dfSzhongyang219 afx_msg void OnNMClickSongList(NMHDR* pNMHDR, LRESULT* pResult); 8705b6c2f7Szhongyang219 afx_msg void OnSize(UINT nType, int cx, int cy); 88*800a68caSzhongyang219 afx_msg void OnNMDblclkSongList(NMHDR* pNMHDR, LRESULT* pResult); 89*800a68caSzhongyang219 afx_msg void OnNMRClickSongList(NMHDR* pNMHDR, LRESULT* pResult); 90*800a68caSzhongyang219 afx_msg void OnPlayItem(); 91*800a68caSzhongyang219 afx_msg void OnCopyText(); 92*800a68caSzhongyang219 afx_msg void OnViewInMediaLib(); 93*800a68caSzhongyang219 afx_msg void OnLibRecentPlayedItemProperties(); 94*800a68caSzhongyang219 afx_msg void OnInitMenu(CMenu* pMenu); 959cffa0dfSzhongyang219 }; 96