本例要解决的问题是:成绩按优良中差分组。

一,新建一个基于对话框的BCG工程,单ChengJiGridCtrl。

二,新增CChengJiGridCtrl类,派生于网格控件。头文件如下:

class CChengJiGridCtrl : public CBCGPGridCtrl  

{

public:

CChengJiGridCtrl();

virtual ~CChengJiGridCtrl();

virtual int CompareGroup (const CBCGPGridRow* pRow1, const CBCGPGridRow* pRow2, int iColumn);

virtual CString GetGroupName (int nGroupCol, CBCGPGridItem* pItem);

//{{AFX_MSG(CColorGridCtrl)

afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

源文件如下:

BEGIN_MESSAGE_MAP(CChengJiGridCtrl, CBCGPGridCtrl)

//{{AFX_MSG_MAP(CColorGridCtrl)

ON_WM_CREATE()

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

CChengJiGridCtrl::CChengJiGridCtrl()

{

}

CChengJiGridCtrl::~CChengJiGridCtrl()

{

}

int CChengJiGridCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 

{

if (CBCGPGridCtrl::OnCreate(lpCreateStruct) == -1)

return -1;

EnableMarkSortedColumn (TRUE, FALSE);

EnableHeader (TRUE, BCGP_GRID_HEADER_MOVE_ITEMS | BCGP_GRID_HEADER_SORT);

EnableRowHeader (TRUE);

EnableLineNumbers ();

EnableInvertSelOnCtrl ();

const int nColumns = 2;

InsertColumn (0, "姓名", 80);

InsertColumn (1, "成绩", 80);

//-----------------------

// 以第二列分组

//-----------------------

InsertGroupColumn (0, 1);

_variant_t var[][nColumns] = {

{_T("张三"),(long)92},

{_T("李四"),(long)55},

{_T("王五"),(long)70},

{_T("赵六"),(long)95},

};

const int iRowCnt = sizeof(var)/sizeof(var[0]);

for (int i = 0; i < iRowCnt ; i++)

{

CBCGPGridRow* pRow = CreateRow (GetColumnCount ());

for(int j = 0 ; j < nColumns ; j++)

pRow->GetItem (j)->SetValue (var[i][j]);

AddRow (pRow, FALSE);

}

SetReadOnly ();

AdjustLayout ();

return 0;

}

int GetLeve(long l)

{

if( l >= 90 )

return 4;

if( l >= 80 )

return 3;

if( l >= 70 )

return 2;

if( l >= 60 )

return 1;

return 0;

}

//********************************************************************************

int CChengJiGridCtrl::CompareGroup (const CBCGPGridRow* pRow1, const CBCGPGridRow* pRow2, int /*iColumn*/)

{

ASSERT_VALID (this);

ASSERT_VALID (pRow1);

ASSERT_VALID (pRow2);

long lVal1 = (long) pRow1->GetItem (1)->GetValue ();

long lVal2 = (long) pRow2->GetItem (1)->GetValue ();

return GetLeve(lVal2) - GetLeve(lVal1);

}

//********************************************************************************

CString CChengJiGridCtrl::GetGroupName (int /*iColumn*/, CBCGPGridItem* pItem)

{

ASSERT_VALID (this);

ASSERT_VALID (pItem);

long lVal = (long) pItem->GetValue ();

long lLeve = GetLeve(lVal);

if( 4 == lLeve )

return _T("");

else if( 3 == lLeve) 

return _T("");

else if( 2 == lLeve )

return _T("");

else if( 1 == lLeve )

return _T("合格");

return _T("不合格");

}

三,CChengJiGridCtrlDlg类增加变量

CChengJiGridCtrl m_grid;

四,CChengJiGridCtrlDlg::OnInitDialog

CRect r(0,0,300,300);

m_grid.Create(WS_CHILD, r, this, 1);

m_grid.ShowWindow(SW_SHOW);

五,Ctrl+F5查看运行效果。如图:

 

源码下载:

http://download.csdn.net/detail/he_zhidan/8010335

posted on 2022-01-21 18:57  闻缺陷则喜何志丹  阅读(7)  评论(0编辑  收藏  举报  来源