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 48 void ShowList(); 49 void QuickSearch(const wstring& key_word); //根据关键字执行快速查找,将结果保存在m_list_data_searched中 50 51 //向父窗口发送消息以更新“播放选中”按钮的状态 52 void SetPlaySelectedEnable(bool enable); 53 54 protected: 55 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 56 57 DECLARE_MESSAGE_MAP() 58 public: 59 virtual BOOL OnInitDialog(); 60 virtual void OnOK(); 61 protected: 62 afx_msg LRESULT OnSearchEditBtnClicked(WPARAM wParam, LPARAM lParam); 63 public: 64 afx_msg void OnEnChangeSearchEdit(); 65 afx_msg void OnNMClickSongList(NMHDR* pNMHDR, LRESULT* pResult); 66 }; 67