為MFC Grid Control 添加 button類型cell

來源:互聯網
上載者:User

最近有個項目需要用grid ctrl 呈現多種控制項類型, 而我也一直用的是codeproject上的 MFC Grid Control
, 這個控制項很強大, 而且易於擴充, 源碼也提供多種類型的控制項, 包括checkbox, combobox, 等等。

 

下面就給出如何為CGridCtrl添加自己的控制項類型方法, 本文是button控制項

 

CGridCellButton標頭檔

/********************************************************************<br />created:2009/09/27<br />created:27:9:2009 9:14<br />filename: /GridCtrl/NewCellTypes/GridCellButton.h<br />file path:/GridCtrl/NewCellTypes<br />file base:GridCellButton<br />file ext:h<br />author:Li JianGong</p><p>purpose:Create button cell<br />*********************************************************************/<br />#include "../GridCtrl_src/GridCell.h"<br />class CGridCellButton : public CGridCell<br />{<br />friend class CGridCtrl;<br />DECLARE_DYNCREATE(CGridCellButton)<br />public:<br />CGridCellButton(void);<br />~CGridCellButton(void);<br />public:<br /> virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE);<br />protected:<br /> virtual void OnClick( CPoint PointCellRelative);<br />protected:<br /> CRect m_rect;<br />BOOL m_bPushing; <br />}<br />

 

CGridCellButton實現檔案

#include "stdafx.h"<br />#include "../GridCtrl_src/GridCell.h"<br />#include "../GridCtrl_src/GridCtrl.h"<br />#include "GridCellButton.h"<br />#ifdef _DEBUG<br />#define new DEBUG_NEW<br />#undef THIS_FILE<br />static char THIS_FILE[] = __FILE__;<br />#endif<br />IMPLEMENT_DYNCREATE(CGridCellButton, CGridCell)<br />CGridCellButton::CGridCellButton(void)<br />{<br />m_bPushing = FALSE;<br />}<br />CGridCellButton::~CGridCellButton(void)<br />{<br />}<br />BOOL CGridCellButton::Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd /* = TRUE */)<br />{<br /> m_rect = rect;<br /> pDC->SetBkMode(TRANSPARENT);<br /> rect.DeflateRect( GetMargin(), 0);<br /> CFont* pOldFont = pDC->SelectObject(GetFontObject());<br /> pDC->DrawFrameControl(rect, DFC_BUTTON, m_bPushing?DFCS_BUTTONPUSH | DFCS_PUSHED:DFCS_BUTTONPUSH);<br /> COLORREF ColorCurrent = pDC->GetTextColor();<br /> pDC->SetTextColor(::GetSysColor(COLOR_BTNTEXT));<br /> pDC->DrawText(GetText(), -1, rect, DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);<br /> pDC->SetTextColor( ColorCurrent);<br /> return TRUE;<br />}<br />void CGridCellButton::OnClick(CPoint PointCellRelative)<br />{<br />m_bPushing = !m_bPushing;<br />GetGrid()->InvalidateRect(m_rect);<br />}<br />

 

使用方法:

CGridCtrl m_gridAddOn; //dlg.h檔案<br /> //////////////////////////////////////<br /> //dlg.cpp檔案<br /> m_gridAddOn.Create(rect, this, IDC_LIST);<br />m_gridAddOn.Refresh();<br /> m_gridAddOn.SetColumnCount(4);<br />m_gridAddOn.SetFixedColumnCount(0);<br />m_gridAddOn.SetFixedRowCount(1);<br />m_gridAddOn.SetColumnWidth(0, 95);<br />m_gridAddOn.SetColumnWidth(1, 95);<br />m_gridAddOn.SetColumnWidth(2, 70);<br />m_gridAddOn.SetColumnWidth(3, 145);<br />m_gridAddOn.SetItemText(0, 0, _T("Application"));<br />m_gridAddOn.SetItemText(0, 1, _T("Status"));<br />m_gridAddOn.SetItemText(0, 2, _T("Action"));<br />m_gridAddOn.SetItemText(0, 3, _T("Auto-Start"));<br />m_gridAddOn.InsertRow(_T("item"));<br />m_gridAddOn.SetItemText(0, 0, _T("Simulator"));<br />m_gridAddOn.SetItemText(0, 1, _T("Stop"));<br />m_gridAddOn.SetItemText(0, 2, _T("Start"));<br /> if (!m_gridAddOn.SetCellType(0, 2, RUNTIME_CLASS(CGridCellButton)))<br />return NULL;<br />m_gridAddOn.SetItemText(0, 3, _T(""));<br />

 

效果如下:

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.