class CGXChild
The CGXChild class is an abstract base class. CGXChild establishes a default control-to-child interface that derived control child classes must implement. CGXChild objects can be added to a CGXControl object and can be used for small buttons (such as the up- and down-arrow buttons in the CGXSpinEdit control).
You should create and add the children in the constructor of your CGXControl-derived class.
The rectangle for the button should be passed to the child object when the control’s OnInitChildren method is called.
See the example for an edit control with a bitmap-button in the cell.
#include <gxall.h>
Example
This example illustrates an edit control with a bitmap-button in the cell.
////////////////////////////////////////////////////////////////////
// CBitmapBtnEdit control
class CBitmapBtnEdit: public CGXEditControl
{
GRID_DECLARE_CONTROL(CBitmapBtnEdit);
public:
// Constructor & Destructor
CBitmapBtnEdit(CGXGridCore* pGrid, UINT nID);
virtual CRect GetCellRect(ROWCOL nRow, ROWCOL nCol, LPRECT rectItem = NULL, const CGXStyle* pStyle = NULL);
protected:
virtual void OnInitChildren(ROWCOL nRow, ROWCOL nCol, const CRect& rect);
virtual void OnClickedButton(CGXChild* pChild);
// Attributes:
CGXBitmapButtonChild* m_pButton;
CSize m_sizeBtn;
// Generated message map functions
protected:
//{{AFX_MSG(CBitmapBtnEdit)
//}}AFX_MSG
GRID_DECLARE_MESSAGE_MAP()
};
//////////////////////////////////////////////////////////////////////
// CBitmapBtnEdit control
CBitmapBtnEdit::CBitmapBtnEdit(CGXGridCore* pGrid, UINT nID)
: CGXEditControl(pGrid, nID)
{
AddChild(m_pButton = new CGXBitmapButtonChild(this));
VERIFY(m_pButton->LoadBitmaps(IDB_BITMAP1));
m_sizeBtn = CSize(14,14);
}
BEGIN_MESSAGE_MAP(CBitmapBtnEdit, CGXEditControl)
//{{AFX_MSG_MAP(CBitmapBtnEdit)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
CRect CBitmapBtnEdit::GetCellRect(ROWCOL nRow, ROWCOL nCol, LPRECT rectItem /* = NULL */, const CGXStyle* pStyle /*= NULL*/)
{
// compute the interior rectangle for the text
// without buttons and borders
CRect rect = CGXEditControl::GetCellRect(nRow, nCol, rectItem, pStyle);
rect.left += m_sizeBtn.cx+3;
return rect;
}
void CBitmapBtnEdit:: OnInitChildren(ROWCOL nRow, ROWCOL nCol, const CRect& rect)
{
nRow, nCol;
int nTop = (max(0, rect.Height() - m_sizeBtn.cy)) / 2;
// init BitmapBtn button
CRect rectBtn;
rectBtn.IntersectRect(rect,
CRect(rect.left+3,
rect.top + nTop,
rect.left+3+m_sizeBtn.cx,
rect.top+ nTop + m_sizeBtn.cy)
);
m_pButton->SetRect(rectBtn);
}
void CBitmapBtnEdit::OnClickedButton(CGXChild* pChild)
{
pChild;
AfxMessageBox("You pressed the bitmap");
};