1 #pragma once 2 #include "Common.h" 3 #include "ListCtrlEx.h" 4 #include "TabDlg.h" 5 #include "SearchEditCtrl.h" 6 #include "ListCache.h" 7 8 // CSetPathDlg 对话框 9 // #define WM_PATH_SELECTED (WM_USER+107) 不再使用 10 11 class CSetPathDlg : public CTabDlg 12 { 13 DECLARE_DYNAMIC(CSetPathDlg) 14 15 public: 16 CSetPathDlg(CWnd* pParent = NULL); // 标准构造函数 17 virtual ~CSetPathDlg(); 18 19 // 对话框数据 20 #ifdef AFX_DESIGN_TIME 21 enum { IDD = IDD_SET_PATH_DIALOG }; 22 #endif 23 24 public: 25 void QuickSearch(const wstring& key_words); //根据关键字执行快速查找(更新m_search_result) 26 void AdjustColumnWidth(); //自动调整列表宽度 27 void RefreshTabData(); //刷新标签页数据 28 bool SetCurSel(const wstring& folder_path); 29 30 protected: 31 bool m_searched{ false }; // 是否处于搜索状态 32 wstring m_searched_str; 33 vector<size_t> m_search_result; // 储存快速搜索结果的歌曲序号 34 35 CListCache m_list_cache; // 缓存此窗口使用的所有ListItem 36 CListCtrlEx m_path_list; // 列表对象,数据加载自m_list_cache,搜索状态下经过m_search_result筛选 37 int m_list_selected{}; // 选中的列表数据索引(搜索状态下不是m_list_cache的索引) 38 39 CEdit m_path_name; 40 CSearchEditCtrl m_search_edit; 41 42 // 判断选择是否有效 43 bool SelectValid() const; 44 // 获取选择的项目 45 const ListItem& GetSelPath() const; 46 // 返回当前选中GetSelPath()是否能够播放 47 bool SelectedCanPlay() const; 48 // 判断并设置“播放选中”按钮状态 49 void SetButtonsEnable(); 50 // 更新m_path_list_info和m_path_list,搜索状态下请确保m_search_result不越界 51 void ShowPathList(); 52 // 计算列宽 53 void CalculateColumeWidth(vector<int>& width); 54 void SetListRowData(int index, const ListItem& list_item); 55 56 virtual void OnTabEntered() override; 57 virtual bool InitializeControls() override; 58 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 59 60 DECLARE_MESSAGE_MAP() 61 public: 62 virtual BOOL OnInitDialog(); 63 //afx_msg void OnBnClickedDeletePathButton(); 64 //virtual BOOL OnUiCommand(WPARAM wParam, LPARAM lParam); 65 afx_msg void OnNMClickPathList(NMHDR *pNMHDR, LRESULT *pResult); 66 afx_msg void OnNMRClickPathList(NMHDR *pNMHDR, LRESULT *pResult); 67 afx_msg void OnNMDblclkPathList(NMHDR *pNMHDR, LRESULT *pResult); 68 afx_msg void OnSize(UINT nType, int cx, int cy); 69 virtual void OnOK(); 70 afx_msg void OnBnClickedOpenFolder(); 71 afx_msg void OnPlayPath(); 72 afx_msg void OnDeletePath(); 73 afx_msg void OnBrowsePath(); 74 afx_msg void OnClearInvalidPath(); 75 afx_msg void OnInitMenu(CMenu* pMenu); 76 afx_msg void OnEnChangeSearchEdit(); 77 //afx_msg void OnBnClickedClearButton(); 78 virtual BOOL PreTranslateMessage(MSG* pMsg); 79 protected: 80 afx_msg LRESULT OnSearchEditBtnClicked(WPARAM wParam, LPARAM lParam); 81 public: 82 afx_msg void OnContainSubFolder(); 83 afx_msg void OnBnClickedSortButton(); 84 afx_msg void OnLibFolderSortRecentPlayed(); 85 afx_msg void OnLibFolderSortRecentAdded(); 86 afx_msg void OnLibFolderSortPath(); 87 afx_msg void OnLibFolderProperties(); 88 afx_msg void OnFileOpenFolder(); 89 virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam); 90 afx_msg void OnAddToNewPlaylist(); 91 }; 92