CBCGPGridCtrl实践

🌌 365bet真人网 ⏱️ 2025-11-21 15:54:42 👤 admin 👁️ 714 ⭐ 515
CBCGPGridCtrl实践

定义说明

资源

IDC_CHECK .bmp类型的勾选的图片资源ID

IDC_FOLDER .ico类型的文件夹图片资源ID

IDC_NODE .ico类型的节点图片资源ID

IDC_PICTURE_AREA MFC的picture控件ID,该区域用于创建CBCGPGridCtrl

控件相关

定义列号,方便后期修改

enum{

FIRST_CHECK,

SECOND_ORINARY,

THIRD_BUTTON,

FOURTH_COMBBOX,

FIVETH_PROGRESS_BAR

}

对话框中定义变量

CBCGPGridCtrl m_Grid;

CImageList m_ImageList;

设置图片列表

m_imageList.Create(16,16, ILC_COLOR24|ILC_MASK, 0, 1)

CBitmap bmp;

bmp.LoadBitmap(IDC_CHECK);

m_ImageList.Add(&bmp, RGB(255, 0, 255));

m_ImageList.Add(AfxGetApp()->LoadIcon(IDC_FOLDER));

m_ImageList.Add(AfxGetApp()->LoadIcon(IDC_NODE));

m_Grid.SetImageList(&m_ImageList);

定义BCGPGrid位置

UINT controlID = IDC_PICTURE_AREA; //控件绘制所用的MFC控件picture control

CRect rc;

pParentWnd->GetDlgItem(controlID)->GetWindowRect(&rc);

pParentWnd->ScreenToClient(&rc);

pParentWnd->GetDlgItem(controlID)->ShowWindow(SW_HIDE); //隐藏picture control

创建

CWnd* pParentWnd = this; //控件隶属于对话框,父窗口赋值对话框this指针

BOOL bCreate = m_Grid.Create(WS_VISIBLE|WS_CHILD|WS_BORDER, rc, pParentWnd, controlID);

m_Grid.SetVisualManagerColorTheme(TRUE);

根据所需设置BCGPGrid属性

m_Grid.EnableColumnAutoSize(FALSE);

m_Grid.EnableGridLines(TRUE);

m_Grid.EnableMarkSortedColumn (FALSE);

m_Grid.EnableHeader (TRUE, BCGP_GRID_HEADER_MOVE_ITEMS);

m_Grid.EnableGridLines(TRUE);

m_Grid.SetClearInplaceEditOnEnter (FALSE);

m_Grid.EnableInvertSelOnCtrl ();

m_Grid.EnableHeader (TRUE, BCGP_GRID_HEADER_SORT);

m_Grid.EnableTreeLines(TRUE);

添加列

只有列头,没有数据。

InsertColumn函数最后一个参数为m_ImageList中的索引号。

//第1列为checkbox

m_Grid.InsertColumn(FIRST_CHECK, " ", 25, 2);

m_Grid.SetHeaderAlign(FIRST_CHECK, HDF_CENTER);

m_Grid.SetColumnAlign(FIRST_CHECK,HDF_LEFT);

//第2列为普通列

m_Grid.InsertColumn(SECOND_ORINARY, "名称", 125, 2);

m_Grid.SetHeaderAlign(SECOND_ORINARY, HDF_CENTER);

m_Grid.SetColumnAlign(SECOND_ORINARY,HDF_LEFT);

//第3列为button

m_Grid.InsertColumn(THIRD_BUTTON, "按钮", 125, 2);

m_Grid.SetHeaderAlign(THIRD_BUTTON, HDF_CENTER);

//第4列为combbox

m_Grid.InsertColumn(FOURTH_COMBBOX, "选项", 125, 2);

m_Grid.SetHeaderAlign(FOURTH_COMBBOX, HDF_CENTER);

//第5列为进度条

m_Grid.InsertColumn(FIVETH_PROGRESS_BAR, "进度", 125, 2);

m_Grid.SetHeaderAlign(FIVETH_PROGRESS_BAR, HDF_CENTER);

添加行

添加一行数据

m_Grid.CreateRow(m_Grid.GetColumnCount());

m_Grid.AddRow(pBCGRow, FALSE);

为单元格赋值

CBCGPGridRow *pRow = …

nCol为列索引号

CBCGPGridItem *pItem = pRow->GetItem(nCol);

CString strValue(“测试值”);

// checkbox列赋值

bool bCheck = true;

CBCGPGridCheckItem* pCheckItem = dynamic_cast(pItem);

if (!pCheckItem)

{

pCheckItem = new CBCGPGridCheckItem (bCheck);

pRow->ReplaceItem (nCol, pCheckItem);

}

else

{

pCheckItem->SetState(bChecked);

}

// 普通列赋值

pItem->AllowEdit(FALSE);

pItem->SetValue(strValue.GetString());

// 赋值button

//combbox赋值

pItem->AddOption ("apple");

pItem->AddOption ("banana");

pItem->AddOption ("pear");

pItem->SetValue (strValue.GetString());

//进度条列赋值为10%

pItem->SetDataBar(10);

pItem->SetData(10);

pItem->AllowEdit(FALSE);

//pItem->Redraw();

🛸 相关文章

对号怎么打在电脑上?打勾的符号怎么输入?
365登录器

对号怎么打在电脑上?打勾的符号怎么输入?

📅 08-10 👁️ 8545
lol转区要多久时间完成
365登录器

lol转区要多久时间完成

📅 10-07 👁️ 8345