forked from hiyohiyo/CrystalDiskInfo
/
ListCtrlEx.cpp
128 lines (111 loc) · 3.33 KB
/
ListCtrlEx.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/*---------------------------------------------------------------------------*/
// Author : hiyohiyo
// Mail : hiyohiyo@crystalmark.info
// Web : http://crystalmark.info/
// License : The MIT License
/*---------------------------------------------------------------------------*/
#include "stdafx.h"
#include "ListCtrlEx.h"
IMPLEMENT_DYNAMIC(CListCtrlEx, CListCtrl)
BOOL CListCtrlEx::IsHighContrast()
{
HIGHCONTRAST hc;
hc.cbSize = sizeof(HIGHCONTRAST);
SystemParametersInfo(SPI_GETHIGHCONTRAST, sizeof(HIGHCONTRAST), &hc, 0);
return hc.dwFlags & HCF_HIGHCONTRASTON;
}
CListCtrlEx::CListCtrlEx()
{
m_TextColor1 = RGB(0, 0, 0);
m_TextColor2 = RGB(0, 0, 0);
m_BkColor1 = RGB(255, 255, 255);
m_BkColor2 = RGB(248, 248, 248);
m_LineColor = RGB(224, 224, 224);
// m_Image.Create(1, 50, ILC_COLOR, 0, 0);
}
CListCtrlEx::~CListCtrlEx()
{
m_Font.DeleteObject();
// m_Image.DeleteImageList();
}
BEGIN_MESSAGE_MAP(CListCtrlEx, CListCtrl)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, &CListCtrlEx::OnNMCustomdraw)
END_MESSAGE_MAP()
void CListCtrlEx::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
if(IsHighContrast())
{
return;
}
LPNMLVCUSTOMDRAW lpLVCustomDraw = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);
switch(lpLVCustomDraw->nmcd.dwDrawStage)
{
case CDDS_ITEMPREPAINT:
case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
if(lpLVCustomDraw->nmcd.dwItemSpec % 2 == 0)
{
lpLVCustomDraw->clrText = m_TextColor1;
lpLVCustomDraw->clrTextBk = m_BkColor1;
}
else
{
lpLVCustomDraw->clrText = m_TextColor2;
lpLVCustomDraw->clrTextBk = m_BkColor2;
}
break;
case CDDS_ITEMPOSTPAINT | CDDS_SUBITEM:
{
RECT rc;
CBrush brush(m_LineColor);
CHeaderCtrl* header = this->GetHeaderCtrl();
if(header != NULL)
{
int count = header->GetItemCount();
for(int i = 0; i < count; i++)
{
ListView_GetSubItemRect(m_hWnd, lpLVCustomDraw->nmcd.dwItemSpec, i, LVIR_LABEL, &rc);
rc.left = rc.right - 1;
FillRect(lpLVCustomDraw->nmcd.hdc, &rc, (HBRUSH) brush.GetSafeHandle());
}
}
}
break;
default:
break;
}
*pResult = 0;
*pResult |= CDRF_NOTIFYPOSTPAINT;
*pResult |= CDRF_NOTIFYITEMDRAW;
*pResult |= CDRF_NOTIFYSUBITEMDRAW;
}
void CListCtrlEx::SetTextColor1(COLORREF color){m_TextColor1 = color;}
void CListCtrlEx::SetTextColor2(COLORREF color){m_TextColor2 = color;}
void CListCtrlEx::SetBkColor1(COLORREF color) {m_BkColor1 = color;}
void CListCtrlEx::SetBkColor2(COLORREF color) {m_BkColor2 = color;}
void CListCtrlEx::SetLineColor(COLORREF color) {m_LineColor = color;}
COLORREF CListCtrlEx::GetTextColor1(){return m_TextColor1;}
COLORREF CListCtrlEx::GetTextColor2(){return m_TextColor2;}
COLORREF CListCtrlEx::GetBkColor1() {return m_BkColor1;}
COLORREF CListCtrlEx::GetBkColor2() {return m_BkColor2;}
COLORREF CListCtrlEx::GetLineColor() {return m_LineColor;}
void CListCtrlEx::SetFontEx(CString face, double zoomRatio)
{
LOGFONT logFont = {0};
// GetFont()->GetLogFont(&logFont);
logFont.lfCharSet = DEFAULT_CHARSET;
logFont.lfHeight = (LONG)(-12 * zoomRatio);
logFont.lfQuality = 6;
if(face.GetLength() < 32)
{
wsprintf(logFont.lfFaceName, _T("%s"), face.GetString());
}
else
{
wsprintf(logFont.lfFaceName, _T(""));
}
m_Font.DeleteObject();
m_Font.CreateFontIndirect(&logFont);
// GetHeaderCtrl()->SetFont(&m_Font);
SetFont(&m_Font);
// SetImageList(&m_Image, LVSIL_STATE);
}