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 void CListBoxEnhanced::PreSubclassWindow() 23 { 24 // TODO: 在此添加专用代码和/或调用基类 25 SetExtendedStyle(GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_INFOTIP); 26 ModifyStyle(0, LVS_NOCOLUMNHEADER); 27 28 InsertColumn(0, _T("text"), LVCFMT_LEFT, CalculateColumnWidth()); 29 30 CListCtrlEx::PreSubclassWindow(); 31 } 32 33 int CListBoxEnhanced::CalculateColumnWidth() 34 { 35 CRect rect; 36 GetWindowRect(rect); 37 return rect.Width() - theApp.DPI(20); 38 } 39 40 BEGIN_MESSAGE_MAP(CListBoxEnhanced, CListCtrlEx) 41 ON_NOTIFY_REFLECT(NM_CLICK, &CListBoxEnhanced::OnNMClick) 42 ON_NOTIFY_REFLECT(NM_RCLICK, &CListBoxEnhanced::OnNMRClick) 43 ON_WM_SIZE() 44 END_MESSAGE_MAP() 45 46 47 void CListBoxEnhanced::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult) 48 { 49 LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); 50 // TODO: 在此添加控件通知处理程序代码 51 CRect check_rect; 52 GetItemRect(pNMItemActivate->iItem, check_rect, LVIR_LABEL); //获取选中项目文本的矩形区域(以列表控件左上角为原点) 53 if (check_rect.PtInRect(pNMItemActivate->ptAction)) //如果点击的 54 { 55 CWnd* pParent{ GetParent() }; 56 if (pParent != nullptr) 57 pParent->SendMessage(WM_LISTBOX_SEL_CHANGED, (WPARAM)this, (LPARAM)pNMItemActivate->iItem); 58 } 59 60 *pResult = 0; 61 } 62 63 64 void CListBoxEnhanced::OnNMRClick(NMHDR *pNMHDR, LRESULT *pResult) 65 { 66 LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); 67 // TODO: 在此添加控件通知处理程序代码 68 CWnd* pParent{ GetParent() }; 69 if (pParent != nullptr) 70 pParent->SendMessage(WM_LISTBOX_SEL_CHANGED, (WPARAM)this, (LPARAM)pNMItemActivate->iItem); 71 72 *pResult = 0; 73 } 74 75 76 void CListBoxEnhanced::OnSize(UINT nType, int cx, int cy) 77 { 78 CListCtrlEx::OnSize(nType, cx, cy); 79 80 // TODO: 在此处添加消息处理程序代码 81 SetColumnWidth(0, CalculateColumnWidth()); 82 ShowScrollBar(SB_HORZ, FALSE); 83 } 84