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 std::vector<ListItem> m_all_list_items; 33 CListCtrlEx m_list_ctrl; 34 CListCtrlEx::ListData m_list_data; // 列表数据 35 CListCtrlEx::ListData m_list_data_searched; // 搜索后的列表数据 36 vector<int> m_search_result; //保存搜索后的索引 37 38 bool m_searched{ false }; // 是否处于搜索状态 39 bool m_initialized{ false }; 40 41 private: 42 void InitListData(); 43 virtual void OnTabEntered() override; 44 45 void AddListCacheData(const CListCache& list_cache); //向m_all_list_items中添加一个CListCache中的所有项目 46 void AddMediaLibItem(CMediaClassifier::ClassificationType type); //向m_all_list_items中添加媒体库中指定类型的所有项目 47 void AddAllFolders(); //向m_all_list_items中添加媒体库中所有文件夹 48 49 void ShowList(); 50 void QuickSearch(const wstring& key_word); //根据关键字执行快速查找,将结果保存在m_list_data_searched中 51 52 //向父窗口发送消息以更新“播放选中”按钮的状态 53 void SetPlaySelectedEnable(bool enable); 54 55 protected: 56 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 57 58 DECLARE_MESSAGE_MAP() 59 public: 60 virtual BOOL OnInitDialog(); 61 virtual void OnOK(); 62 protected: 63 afx_msg LRESULT OnSearchEditBtnClicked(WPARAM wParam, LPARAM lParam); 64 public: 65 afx_msg void OnEnChangeSearchEdit(); 66 afx_msg void OnNMClickSongList(NMHDR* pNMHDR, LRESULT* pResult); 67 afx_msg void OnSize(UINT nType, int cx, int cy); 68 }; 69