// HeaderCtrlEx.cpp : 实现文件 // #include "stdafx.h" #include "HeaderCtrlEx.h" // CHeaderCtrlEx IMPLEMENT_DYNAMIC(CHeaderCtrlEx, CHeaderCtrl) CHeaderCtrlEx::CHeaderCtrlEx() { } CHeaderCtrlEx::~CHeaderCtrlEx() { } BEGIN_MESSAGE_MAP(CHeaderCtrlEx, CHeaderCtrl) ON_WM_PAINT() ON_MESSAGE(HDM_LAYOUT, OnLayout) END_MESSAGE_MAP() LRESULT CHeaderCtrlEx::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; int nHeight = 35; pwpos->cy = nHeight; prc->top = nHeight; return lResult; } // CHeaderCtrlEx 消息处理程序; void CHeaderCtrlEx::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: 在此处添加消息处理程序代码; RECT rRect; GetClientRect(&rRect); int nWidth = rRect.right-rRect.left; int nHeight = rRect.bottom-rRect.top; CDC memDC; CBitmap memBitmap; CBrush brush; //填充整个客户区; memDC.CreateCompatibleDC(&dc); memBitmap.CreateCompatibleBitmap(&dc, nWidth, nHeight); memDC.SelectObject(&memBitmap); memDC.SetBkMode(TRANSPARENT); //memDC.SelectObject(GetFont()); CFont font; font.CreateFont(-MulDiv(int(21), 72, 72), 0, 0, 0, FW_NORMAL, 0, 0, 0, GB2312_CHARSET, OUT_STROKE_PRECIS, CLIP_STROKE_PRECIS, PROOF_QUALITY, FIXED_PITCH | FF_SWISS, "微软雅黑"); memDC.SelectObject(&font); TRIVERTEX vert[2] ; GRADIENT_RECT gRect; vert [0] .x = rRect.left; vert [0] .y = rRect.top; vert [1] .x = rRect.right; vert [1] .y = rRect.bottom; vert [0] .Red = 0xff00; vert [0] .Green = 0xff00; vert [0] .Blue = 0xff00; vert [0] .Alpha = 0x0000; vert [1] .Red = 0x9100; vert [1] .Green = 0xd100; vert [1] .Blue = 0xf300; vert [1] .Alpha = 0xff00; gRect.UpperLeft = 0; gRect.LowerRight = 1; memDC.GradientFill(vert,2,&gRect,1,GRADIENT_FILL_RECT_V); //memDC.FillSolidRect(&rRect, RGB(172,232,244)); int nCount = GetItemCount(); for (int i =0; i < nCount; i++) { CRect itemRc; GetItemRect(i, &itemRc); CRect txtRc= itemRc; txtRc.left+=5; //txtRc.top +=5; HDITEM Item={0}; TCHAR lpBuffer[256] = {0}; Item.cchTextMax = 256; Item.pszText = lpBuffer; Item.mask = HDI_TEXT; GetItem(i, &Item); memDC.DrawText(lpBuffer, txtRc, DT_LEFT | DT_SINGLELINE | DT_VCENTER); //切割线; CPen pen; pen.CreatePen(PS_SOLID, 1, 0xFFE4E1); memDC.SelectObject(&pen); memDC.MoveTo(itemRc.right, itemRc.top); memDC.LineTo(itemRc.right, itemRc.bottom); pen.DeleteObject(); pen.CreatePen(PS_SOLID, 1, 0xFFFFFF); memDC.SelectObject(&pen); memDC.MoveTo(itemRc.right+1, itemRc.top); memDC.LineTo(itemRc.right+1, itemRc.bottom); } //底边线; CPen pen; pen.CreatePen(PS_SOLID, 1,0xFFE4E1); memDC.SelectObject(&pen); memDC.MoveTo(rRect.left, rRect.bottom-1); memDC.LineTo(rRect.right, rRect.bottom-1); pen.DeleteObject(); //pen.CreatePen(PS_SOLID, 1, 0xFFFFFF); //memDC.SelectObject(&pen); //memDC.MoveTo(rRect.left, rRect.bottom-2); //memDC.LineTo(rRect.right, rRect.bottom-2); dc.BitBlt(0,0, nWidth, nHeight, &memDC, 0, 0, SRCCOPY); ReleaseDC(&memDC); } BOOL CHeaderCtrlEx::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID) { // TODO: 在此添加专用代码和/或调用基类; return CHeaderCtrl::Create(dwStyle, rect, pParentWnd, nID); }