1 #include "stdafx.h"
2 #include "CListBoxEnhanced.h"
3 #include "MusicPlayer2.h"
4
5
CListBoxEnhanced()6 CListBoxEnhanced::CListBoxEnhanced()
7 : CListCtrlEx()
8 {
9 }
10
11
~CListBoxEnhanced()12 CListBoxEnhanced::~CListBoxEnhanced()
13 {
14 }
15
AddString(LPCTSTR str)16 void CListBoxEnhanced::AddString(LPCTSTR str)
17 {
18 int cnt = GetItemCount();
19 InsertItem(cnt, str);
20 }
21
GetItemText(int index)22 CString CListBoxEnhanced::GetItemText(int index)
23 {
24 return CListCtrlEx::GetItemText(index, 0);
25 }
26
DeleteItem(int nItem)27 bool CListBoxEnhanced::DeleteItem(int nItem)
28 {
29 bool selected_item_deleted = (nItem == GetCurSel());
30 bool rtn = CListCtrlEx::DeleteItem(nItem);
31 //如果删除的是选中的条目,则更新选中状态并通知父窗口
32 if (selected_item_deleted)
33 {
34 SetCurSel(-1);
35 CWnd* pParent{ GetParent() };
36 if (pParent != nullptr)
37 pParent->SendMessage(WM_LISTBOX_SEL_CHANGED, (WPARAM)this, (LPARAM)-1);
38 }
39 return rtn;
40 }
41
PreSubclassWindow()42 void CListBoxEnhanced::PreSubclassWindow()
43 {
44 // TODO: 在此添加专用代码和/或调用基类
45 SetExtendedStyle(GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_INFOTIP);
46 ModifyStyle(0, LVS_NOCOLUMNHEADER);
47
48 InsertColumn(0, _T("text"), LVCFMT_LEFT, CalculateColumnWidth());
49
50 CListCtrlEx::PreSubclassWindow();
51 }
52
CalculateColumnWidth()53 int CListBoxEnhanced::CalculateColumnWidth()
54 {
55 CRect rect;
56 GetWindowRect(rect);
57 return rect.Width() - theApp.DPI(20);
58 }
59
BEGIN_MESSAGE_MAP(CListBoxEnhanced,CListCtrlEx)60 BEGIN_MESSAGE_MAP(CListBoxEnhanced, CListCtrlEx)
61 ON_NOTIFY_REFLECT(NM_CLICK, &CListBoxEnhanced::OnNMClick)
62 ON_NOTIFY_REFLECT_EX(NM_RCLICK, &CListBoxEnhanced::OnNMRClick)
63 ON_WM_SIZE()
64 END_MESSAGE_MAP()
65
66
67 void CListBoxEnhanced::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult)
68 {
69 LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
70 // TODO: 在此添加控件通知处理程序代码
71 CWnd* pParent{ GetParent() };
72 if (pParent != nullptr)
73 {
74 CRect check_rect;
75 GetItemRect(pNMItemActivate->iItem, check_rect, LVIR_LABEL); //获取选中项目文本的矩形区域(以列表控件左上角为原点)
76 if (check_rect.PtInRect(pNMItemActivate->ptAction)) //如果点击的
77 pParent->SendMessage(WM_LISTBOX_SEL_CHANGED, (WPARAM)this, (LPARAM)pNMItemActivate->iItem);
78 else
79 pParent->SendMessage(WM_LISTBOX_SEL_CHANGED, (WPARAM)this, (LPARAM)-1);
80 }
81
82 *pResult = 0;
83 }
84
85
OnNMRClick(NMHDR * pNMHDR,LRESULT * pResult)86 BOOL CListBoxEnhanced::OnNMRClick(NMHDR *pNMHDR, LRESULT *pResult)
87 {
88 LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
89 // TODO: 在此添加控件通知处理程序代码
90 CWnd* pParent{ GetParent() };
91 if (pParent != nullptr)
92 pParent->SendMessage(WM_LISTBOX_SEL_CHANGED, (WPARAM)this, (LPARAM)pNMItemActivate->iItem);
93
94 *pResult = 0;
95 return FALSE;
96 }
97
98
OnSize(UINT nType,int cx,int cy)99 void CListBoxEnhanced::OnSize(UINT nType, int cx, int cy)
100 {
101 CListCtrlEx::OnSize(nType, cx, cy);
102
103 // TODO: 在此处添加消息处理程序代码
104 SetColumnWidth(0, CalculateColumnWidth());
105 ShowScrollBar(SB_HORZ, FALSE);
106 }
107