1 #pragma once 2 #include "afxdialogex.h" 3 #include "TabDlg.h" 4 #include "ListCtrlEx.h" 5 #include "SearchEditCtrl.h" 6 #include "ListCache.h" 7 8 // CFindListDlg 对话框 9 10 class CFindListDlg : public CTabDlg 11 { 12 DECLARE_DYNAMIC(CFindListDlg) 13 14 public: 15 CFindListDlg(CWnd* pParent = nullptr); // 标准构造函数 16 virtual ~CFindListDlg(); 17 18 // 对话框数据 19 #ifdef AFX_DESIGN_TIME 20 enum { IDD = IDD_FIND_LIST_DIALOG }; 21 #endif 22 23 private: 24 enum COLUMN 25 { 26 COL_NAME, 27 COL_TRACK_NUM, 28 COL_MAX 29 }; 30 31 CSearchEditCtrl m_search_edit; 32 33 //列表的来源 34 enum class ItemFrom 35 { 36 UNKNOWN, 37 RECENT_PLAYED, //最近播放 38 MEDIALIB_ITEM, //未播放过的媒体库项目 39 FOLDER_EXPLORE //“文件夹浏览”中未播放过的文件夹 40 }; 41 struct FindListItem 42 { 43 ListItem list_data; 44 ItemFrom item_from; 45 bool operator==(const ListItem& another_list_data) const 46 { 47 return list_data == another_list_data; 48 } 49 }; 50 std::vector<FindListItem> m_all_list_items; 51 CListCtrlEx m_list_ctrl; 52 CListCtrlEx::ListData m_list_data; // 列表数据 53 CListCtrlEx::ListData m_list_data_searched; // 搜索后的列表数据 54 vector<int> m_search_result; //保存搜索后的索引 55 56 bool m_searched{ false }; // 是否处于搜索状态 57 bool m_initialized{ false }; 58 59 private: 60 void InitListData(); 61 virtual void OnTabEntered() override; 62 63 void AddListCacheData(const CListCache& list_cache); //向m_all_list_items中添加一个CListCache中的所有项目 64 void AddMediaLibItem(CMediaClassifier::ClassificationType type); //向m_all_list_items中添加媒体库中指定类型的所有项目 65 void AddAllFolders(); //向m_all_list_items中添加媒体库中所有文件夹 66 67 void ShowList(); 68 void QuickSearch(const wstring& key_word); //根据关键字执行快速查找,将结果保存在m_list_data_searched中 69 70 //向父窗口发送消息以更新“播放选中”按钮的状态 71 void SetPlaySelectedEnable(bool enable); 72 73 FindListItem GetSelectedItem() const; 74 75 protected: 76 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 77 78 DECLARE_MESSAGE_MAP() 79 public: 80 virtual BOOL OnInitDialog(); 81 virtual void OnOK(); 82 protected: 83 afx_msg LRESULT OnSearchEditBtnClicked(WPARAM wParam, LPARAM lParam); 84 public: 85 afx_msg void OnEnChangeSearchEdit(); 86 afx_msg void OnNMClickSongList(NMHDR* pNMHDR, LRESULT* pResult); 87 afx_msg void OnSize(UINT nType, int cx, int cy); 88 afx_msg void OnNMDblclkSongList(NMHDR* pNMHDR, LRESULT* pResult); 89 afx_msg void OnNMRClickSongList(NMHDR* pNMHDR, LRESULT* pResult); 90 afx_msg void OnPlayItem(); 91 afx_msg void OnCopyText(); 92 afx_msg void OnViewInMediaLib(); 93 afx_msg void OnLibRecentPlayedItemProperties(); 94 afx_msg void OnInitMenu(CMenu* pMenu); 95 }; 96