xref: /MusicPlayer2/MusicPlayer2/CListBoxEnhanced.cpp (revision 59ef618b8fe01617e17786d44e79fd61f7f3984b)
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