1877f5f92SZhongYang #include "stdafx.h" 2b4946bd8SZhong Yang #include "CListBoxEnhanced.h" 3b4946bd8SZhong Yang #include "MusicPlayer2.h" 4b4946bd8SZhong Yang 5b4946bd8SZhong Yang 6b4946bd8SZhong Yang CListBoxEnhanced::CListBoxEnhanced() 7b4946bd8SZhong Yang : CListCtrlEx() 8b4946bd8SZhong Yang { 9b4946bd8SZhong Yang } 10b4946bd8SZhong Yang 11b4946bd8SZhong Yang 12b4946bd8SZhong Yang CListBoxEnhanced::~CListBoxEnhanced() 13b4946bd8SZhong Yang { 14b4946bd8SZhong Yang } 15b4946bd8SZhong Yang 16b4946bd8SZhong Yang void CListBoxEnhanced::AddString(LPCTSTR str) 17b4946bd8SZhong Yang { 18b4946bd8SZhong Yang int cnt = GetItemCount(); 19b4946bd8SZhong Yang InsertItem(cnt, str); 20b4946bd8SZhong Yang } 21b4946bd8SZhong Yang 2259ef618bSZhong Yang CString CListBoxEnhanced::GetItemText(int index) 2359ef618bSZhong Yang { 2459ef618bSZhong Yang return CListCtrlEx::GetItemText(index, 0); 2559ef618bSZhong Yang } 2659ef618bSZhong Yang 27*b55021a5SZhong Yang bool CListBoxEnhanced::DeleteItem(int nItem) 28*b55021a5SZhong Yang { 29*b55021a5SZhong Yang bool selected_item_deleted = (nItem == GetCurSel()); 30*b55021a5SZhong Yang bool rtn = CListCtrlEx::DeleteItem(nItem); 31*b55021a5SZhong Yang //如果删除的是选中的条目,则更新选中状态并通知父窗口 32*b55021a5SZhong Yang if (selected_item_deleted) 33*b55021a5SZhong Yang { 34*b55021a5SZhong Yang SetCurSel(-1); 35*b55021a5SZhong Yang CWnd* pParent{ GetParent() }; 36*b55021a5SZhong Yang if (pParent != nullptr) 37*b55021a5SZhong Yang pParent->SendMessage(WM_LISTBOX_SEL_CHANGED, (WPARAM)this, (LPARAM)-1); 38*b55021a5SZhong Yang } 39*b55021a5SZhong Yang return rtn; 40*b55021a5SZhong Yang } 41*b55021a5SZhong Yang 42b4946bd8SZhong Yang void CListBoxEnhanced::PreSubclassWindow() 43b4946bd8SZhong Yang { 44877f5f92SZhongYang // TODO: 在此添加专用代码和/或调用基类 45e6aa5f8bSZhong Yang SetExtendedStyle(GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_INFOTIP); 46b4946bd8SZhong Yang ModifyStyle(0, LVS_NOCOLUMNHEADER); 47b4946bd8SZhong Yang 48b60a26ecSZhong Yang InsertColumn(0, _T("text"), LVCFMT_LEFT, CalculateColumnWidth()); 49b4946bd8SZhong Yang 50b4946bd8SZhong Yang CListCtrlEx::PreSubclassWindow(); 51b4946bd8SZhong Yang } 52b60a26ecSZhong Yang 53b60a26ecSZhong Yang int CListBoxEnhanced::CalculateColumnWidth() 54b60a26ecSZhong Yang { 55b60a26ecSZhong Yang CRect rect; 56b60a26ecSZhong Yang GetWindowRect(rect); 57e2a78e69SZhong Yang return rect.Width() - theApp.DPI(20); 58b60a26ecSZhong Yang } 59b60a26ecSZhong Yang 60b4946bd8SZhong Yang BEGIN_MESSAGE_MAP(CListBoxEnhanced, CListCtrlEx) 61b4946bd8SZhong Yang ON_NOTIFY_REFLECT(NM_CLICK, &CListBoxEnhanced::OnNMClick) 62b4946bd8SZhong Yang ON_NOTIFY_REFLECT(NM_RCLICK, &CListBoxEnhanced::OnNMRClick) 63b60a26ecSZhong Yang ON_WM_SIZE() 64b4946bd8SZhong Yang END_MESSAGE_MAP() 65b4946bd8SZhong Yang 66b4946bd8SZhong Yang 67b4946bd8SZhong Yang void CListBoxEnhanced::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult) 68b4946bd8SZhong Yang { 69b4946bd8SZhong Yang LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); 70877f5f92SZhongYang // TODO: 在此添加控件通知处理程序代码 7159ef618bSZhong Yang CWnd* pParent{ GetParent() }; 7259ef618bSZhong Yang if (pParent != nullptr) 7359ef618bSZhong Yang { 74a8512480SZhong Yang CRect check_rect; 75a8512480SZhong Yang GetItemRect(pNMItemActivate->iItem, check_rect, LVIR_LABEL); //获取选中项目文本的矩形区域(以列表控件左上角为原点) 76a8512480SZhong Yang if (check_rect.PtInRect(pNMItemActivate->ptAction)) //如果点击的 77b4946bd8SZhong Yang pParent->SendMessage(WM_LISTBOX_SEL_CHANGED, (WPARAM)this, (LPARAM)pNMItemActivate->iItem); 7859ef618bSZhong Yang else 7959ef618bSZhong Yang pParent->SendMessage(WM_LISTBOX_SEL_CHANGED, (WPARAM)this, (LPARAM)-1); 80a8512480SZhong Yang } 81b4946bd8SZhong Yang 82b4946bd8SZhong Yang *pResult = 0; 83b4946bd8SZhong Yang } 84b4946bd8SZhong Yang 85b4946bd8SZhong Yang 86b4946bd8SZhong Yang void CListBoxEnhanced::OnNMRClick(NMHDR *pNMHDR, LRESULT *pResult) 87b4946bd8SZhong Yang { 88b4946bd8SZhong Yang LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); 89877f5f92SZhongYang // TODO: 在此添加控件通知处理程序代码 90b4946bd8SZhong Yang CWnd* pParent{ GetParent() }; 91b4946bd8SZhong Yang if (pParent != nullptr) 92b4946bd8SZhong Yang pParent->SendMessage(WM_LISTBOX_SEL_CHANGED, (WPARAM)this, (LPARAM)pNMItemActivate->iItem); 93b4946bd8SZhong Yang 94b4946bd8SZhong Yang *pResult = 0; 95b4946bd8SZhong Yang } 96b60a26ecSZhong Yang 97b60a26ecSZhong Yang 98b60a26ecSZhong Yang void CListBoxEnhanced::OnSize(UINT nType, int cx, int cy) 99b60a26ecSZhong Yang { 100b60a26ecSZhong Yang CListCtrlEx::OnSize(nType, cx, cy); 101b60a26ecSZhong Yang 102877f5f92SZhongYang // TODO: 在此处添加消息处理程序代码 103b60a26ecSZhong Yang SetColumnWidth(0, CalculateColumnWidth()); 104b60a26ecSZhong Yang ShowScrollBar(SB_HORZ, FALSE); 105b60a26ecSZhong Yang } 106