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