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