CTreeGridCtrl是继承自CGridCtrl而来,实现了Grid中嵌套子的功能,单元格中可以包含check控件,button控件,combox控件等,简单的实例如下:
CTreeGridCtrl m_Grid;
{
m_Grid.EnableDragAndDrop(TRUE);
m_Grid.SetFixedColumnSelection(TRUE);
m_Grid.SetFixedRowSelection(TRUE);
int m_nFixCols = 1;
int m_nFixRows = 1;
m_Grid.SetFixedRowCount(m_nFixRows);
m_Grid.SetFixedColumnCount(m_nFixCols);
m_Grid.SetRedraw(FALSE);
m_Grid.SetTreeLineColors(RGB(0x0, 0x0, 0x0), RGB(0x0, 0x0, 0x0));
m_Grid.SetTreeColumnCellTypeID(CT_CHECKBOX);
LPCTSTR strArray[] = { _T("Tree Column 0"), _T("Column 1"), _T("Column 2"), _T("Column 3"), _T("Column 4") };
for (int i = 0; i < _countof(strArray); i++)
{
m_Grid.InsertColumn(strArray[i]);
if (i == 0)
{
m_Grid.SetColumnWidth(i + 1, 200);
}
else
{
m_Grid.SetColumnWidth(i + 1, 150);
}
}
m_Grid.SetRedraw(TRUE);
GTV_HTREENODE hItem1 = m_Grid.InsertItem(_T("Root Item1"));
m_Grid.InsertItem(_T("Item1-Child 1"), hItem1);
m_Grid.InsertItem(_T("Item1-Child 2"), hItem1);
m_Grid.InsertItem(_T("Root ItemX2"));
m_Grid.InsertItem(_T("Root Item4"));
GV_ITEM Item;
Item.mask = GVIF_TEXT;
Item.row = 0;
Item.col = 0;
Item.strText = _T("Root Item3");
Item.mask |= (GVIF_IMAGE);
m_Grid.InsertItem(&Item);
m_Grid.SetTreeColumnCellTypeID(CT_DEFAULT);
Item.mask &= ~GVIF_IMAGE;
Item.strText = _T("2 level down 2");
m_Grid.SetColumnWidth(0, 18);
m_Grid.SetCellText(1, 2, L"测试1");
m_Grid.SetCellType(1, 3, RUNTIME_CLASS(CGridCellCombo));
CStringArray options;
options.Add(_T("Option 1"));
options.Add(_T("Option 2"));
options.Add(_T("Option 3"));
CGridCellCombo *pCombox = (CGridCellCombo*)m_Grid.GetCell(1, 3);
pCombox->SetOptions(options);
pCombox->SetStyle(CBS_DROPDOWN); //CBS_DROPDOWN, CBS_DROPDOWNLIST, CBS_SIMPLE
pCombox->SetCurSel(1);
m_Grid.ExpandLastColumn();
}
效果图如下所示: