CGridCtrl 添加button (CGridCellButton类)
#ifndef __GRID_CELL_BUTTON__ #define __GRID_CELL_BUTTON__ #include "../GridCtrl_src/GridCell.h" class CGridCellButton : public CGridCell { friend class CGridCtrl; DECLARE_DYNCREATE(CGridCellButton) public: CGridCellButton(void); ~CGridCellButton(void); public: virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE); protected: virtual void OnClick(CPoint PointCellRelative); protected: CRect m_rect; BOOL m_bPushing; }; #endif
.cpp:
#include "stdafx.h" #include "../GridCtrl_src/GridCell.h" #include "../GridCtrl_src/GridCtrl.h" #include "GridCellButton.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif IMPLEMENT_DYNCREATE(CGridCellButton, CGridCell) CGridCellButton::CGridCellButton(void) { m_bPushing = FALSE; } CGridCellButton::~CGridCellButton(void) { } BOOL CGridCellButton::Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd /* = TRUE */) { m_rect = rect; pDC->SetBkMode(TRANSPARENT); rect.DeflateRect(GetMargin(), 0); CFont* pOldFont = pDC->SelectObject(GetFontObject()); pDC->DrawFrameControl(rect, DFC_BUTTON, m_bPushing ? DFCS_BUTTONPUSH | DFCS_PUSHED : DFCS_BUTTONPUSH); COLORREF ColorCurrent = pDC->GetTextColor(); pDC->SetTextColor(::GetSysColor(COLOR_BTNTEXT)); pDC->DrawText(GetText(), -1, rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS); pDC->SetTextColor(ColorCurrent); return TRUE; } void CGridCellButton::OnClick(CPoint PointCellRelative) { m_bPushing = !m_bPushing; GetGrid()->InvalidateRect(m_rect); }
编译环境:vs2013 CGridCtrl版本:2.27