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