|
|
// HeaderCtrlCl.cpp : 实现文件
|
|
|
//
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
// #include "DemoList.h"
|
|
|
#include "HeaderCtrlCl.h"
|
|
|
|
|
|
|
|
|
// CHeaderCtrlCl
|
|
|
|
|
|
IMPLEMENT_DYNAMIC(CHeaderCtrlCl, CHeaderCtrl)
|
|
|
|
|
|
CHeaderCtrlCl::CHeaderCtrlCl()
|
|
|
: m_R(171)
|
|
|
, m_G(199)
|
|
|
, m_B(235)
|
|
|
, m_Gradient(8)
|
|
|
{
|
|
|
m_Format = "";
|
|
|
m_Height = 1;
|
|
|
m_fontHeight = 15;
|
|
|
m_fontWith = 0;
|
|
|
m_color = RGB(0,0,0);
|
|
|
}
|
|
|
|
|
|
CHeaderCtrlCl::~CHeaderCtrlCl()
|
|
|
{
|
|
|
}
|
|
|
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CHeaderCtrlCl, CHeaderCtrl)
|
|
|
ON_WM_PAINT()
|
|
|
ON_MESSAGE(HDM_LAYOUT, OnLayout)
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
|
|
|
|
|
// CHeaderCtrlCl 消息处理程序
|
|
|
|
|
|
|
|
|
|
|
|
void CHeaderCtrlCl::OnPaint()
|
|
|
{
|
|
|
CPaintDC dc(this); // device context for painting
|
|
|
// TODO: 在此处添加消息处理程序代码
|
|
|
// 不为绘图消息调用 CHeaderCtrl::OnPaint()
|
|
|
int nItem;
|
|
|
nItem = GetItemCount();//得到有几个单元
|
|
|
for(int i = 0; i<nItem;i ++)
|
|
|
{
|
|
|
CRect tRect;
|
|
|
GetItemRect(i,&tRect);//得到Item的尺寸
|
|
|
int R = m_R,G = m_G,B = m_B;
|
|
|
CRect nRect(tRect);//拷贝尺寸到新的容器中
|
|
|
nRect.left++;//留出分割线的地方
|
|
|
//绘制立体背景
|
|
|
for(int j = tRect.top;j<=tRect.bottom;j++)
|
|
|
{
|
|
|
nRect.bottom = nRect.top+1;
|
|
|
CBrush _brush;
|
|
|
_brush.CreateSolidBrush(RGB(R,G,B));//创建画刷
|
|
|
dc.FillRect(&nRect,&_brush); //填充背景
|
|
|
_brush.DeleteObject(); //释放画刷
|
|
|
R-=m_Gradient;G-=m_Gradient;B-=m_Gradient;
|
|
|
if (R<0)R = 0;
|
|
|
if (G<0)G = 0;
|
|
|
if (B<0)B= 0;
|
|
|
nRect.top = nRect.bottom;
|
|
|
}
|
|
|
dc.SetBkMode(TRANSPARENT);
|
|
|
CFont nFont ,* nOldFont;
|
|
|
//dc.SetTextColor(RGB(250,50,50));
|
|
|
dc.SetTextColor(m_color);
|
|
|
nFont.CreateFont(m_fontHeight,m_fontWith,0,0,0,FALSE,FALSE,0,0,0,0,0,0,_TEXT("宋体"));//创建字体
|
|
|
nOldFont = dc.SelectObject(&nFont);
|
|
|
|
|
|
UINT nFormat = 1;
|
|
|
if (m_Format[i]=='0')
|
|
|
{
|
|
|
nFormat = DT_LEFT;
|
|
|
tRect.left+=3;
|
|
|
}
|
|
|
else if (m_Format[i]=='1')
|
|
|
{
|
|
|
nFormat = DT_CENTER;
|
|
|
}
|
|
|
else if (m_Format[i]=='2')
|
|
|
{
|
|
|
nFormat = DT_RIGHT;
|
|
|
tRect.right-=3;
|
|
|
}
|
|
|
TEXTMETRIC metric;
|
|
|
dc.GetTextMetrics(&metric);
|
|
|
int ofst = 0;
|
|
|
ofst = tRect.Height() - metric.tmHeight;
|
|
|
tRect.OffsetRect(0,ofst/2);
|
|
|
dc.DrawText(m_HChar[i],&tRect,nFormat);
|
|
|
dc.SelectObject(nOldFont);
|
|
|
nFont.DeleteObject(); //释放字体
|
|
|
}
|
|
|
//画头部剩余部分
|
|
|
CRect rtRect;
|
|
|
CRect clientRect;
|
|
|
GetItemRect(nItem - 1,rtRect);
|
|
|
GetClientRect(clientRect);
|
|
|
rtRect.left = rtRect.right+1;
|
|
|
rtRect.right = clientRect.right;
|
|
|
int R = m_R,G = m_G,B = m_B;
|
|
|
CRect nRect(rtRect);
|
|
|
//绘制立体背景
|
|
|
for(int j = rtRect.top;j<=rtRect.bottom;j++)
|
|
|
{
|
|
|
nRect.bottom = nRect.top+1;
|
|
|
CBrush _brush;
|
|
|
_brush.CreateSolidBrush(RGB(R,G,B));//创建画刷
|
|
|
dc.FillRect(&nRect,&_brush); //填充背景
|
|
|
_brush.DeleteObject(); //释放画刷
|
|
|
R-=m_Gradient;G-=m_Gradient;B-=m_Gradient;
|
|
|
if (R<0)R = 0;
|
|
|
if (G<0)G = 0;
|
|
|
if (B<0)B= 0;
|
|
|
nRect.top = nRect.bottom;
|
|
|
}
|
|
|
}
|
|
|
LRESULT CHeaderCtrlCl::OnLayout( WPARAM wParam, LPARAM lParam )
|
|
|
{
|
|
|
LRESULT lResult = CHeaderCtrl::DefWindowProc(HDM_LAYOUT, 0, lParam);
|
|
|
HD_LAYOUT &hdl = *( HD_LAYOUT * ) lParam;
|
|
|
RECT *prc = hdl.prc;
|
|
|
WINDOWPOS *pwpos = hdl.pwpos;
|
|
|
|
|
|
//表头高度为原来1.5倍,如果要动态修改表头高度的话,将1.5设成一个全局变量
|
|
|
int nHeight = (int)(pwpos->cy * m_Height);
|
|
|
pwpos->cy = nHeight;
|
|
|
prc->top = nHeight;
|
|
|
return lResult;
|
|
|
} |