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