網格控制項群組的高階使用

2021-06-26 04:13:59 字數 2957 閱讀 9367

本例要解決的問題是:成績按優良中差分組。

一,新建乙個基於對話方塊的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

declare_message_map()

原始檔如下:

begin_message_map(cchengjigridctrl, cbcgpgridctrl)

//}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] = , ,

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

for (int i = 0; i 

cbcgpgridrow* prow = createrow (getcolumncount ());

for(int j = 0 ; 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檢視執行效果。如圖:

MFC中的CListCtrl網格控制項新增行

1 2 3 4 5 6 7 8 9 m list.attach getdlgitem this m hwnd,idc list1 手動關聯變數 m list.insertcolumn 0,t 工號 0,120 m list.insertcolumn 1,t 姓名 0,120 m list.inser...

高階的TreeView控制項

帶 透明效果的treeview.能任意改變線條的位置,底圖可擴充到文字背後,整個控制項可以透明地浮動於form上。可以自動展開閉合,自動顯示滾動條。目前只做了3層。使用方法和treeview不一樣。基本方法 add1 add2 add3 分別新增各層的資料。image1 image2是各層的。tex...

PyQt5 高階控制項使用(QListWidget)

qlistwidget是乙個用於顯示資料的列表,每個條目中都是乙個qlistwidgetitem物件 qlistwidget可以設定多選 常用方法如下 常用訊號 例如 1 qlistwidget 控制項使用 2from pyqt5.qtwidgets import 3from pyqt5.qtgui...