wxWidgets之wxGrid控件
阅读原文时间:2023年07月16日阅读:1

1. 介绍

wxGrid控件时wxWidgets界面库中内置的网格控件。

通经常使用来显示表格数据。该控件拥有强大的功能。开发人员可依据自己的需求对其进行定制。

2. 经常使用API     

 构造函数:  
    wxGrid ()  
    wxGrid (wxWindow \*parent, wxWindowID id, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxWANTS\_CHARS, const wxString &name=wxGridNameStr)       

 创建表格的API:  
    // 创建一个空的表格  
    bool Create (wxWindow \*parent, wxWindowID id, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxWANTS\_CHARS, const wxString &name=wxGridNameStr)  
    // 创建一个指定行,制定列的表格  
    bool CreateGrid (int numRows, int numCols, wxGridSelectionModes selmode=wxGridSelectCells)

 关于大小的API:  
    // 获取列标签的高度  
    int GetColLabelSize () const  
    // 获取指定列的宽度  
    int GetColSize (int col) const  
    // 获取默认的列标签宽度  
    int GetDefaultColLabelSize () const  
    // 获取默认的列宽  
    int GetDefaultColSize () const  
    // 获取默认的行标签宽度  
    int GetDefaultRowLabelSize () const  
    // 获取默认的行高度  
    int GetDefaultRowSize () const  
    // 获取行标签的宽度  
    int GetRowLabelSize () const  
    // 获取指定行的高度  
    int GetRowSize (int row) const  
    // 设置指定列的宽度  
    void SetColSize (int col, int width)  
    // 设置列标签的高度  
    void SetColLabelSize (int height)  
    // 设置默认的列宽度  
    void SetDefaultColSize (int width, bool resizeExistingCols=false)  
    // 设置默认的行高度  
    void SetDefaultRowSize (int height, bool resizeExistingRows=false)  
    // 设置行标签的宽度  
    void SetRowLabelSize (int width)  
    // 设置指定行的高度  
    void SetRowSize (int row, int height)  
    // 获取列的大小信息  
    wxGridSizesInfo GetColSizes () const  
    // 获取行的大小信息  
    wxGridSizesInfo GetRowSizes () const  
    // 设置列的大小信息  
    void SetColSizes (const wxGridSizesInfo &sizeInfo)  
    // 设置行的大小信息  
    void SetRowSizes (const wxGridSizesInfo &sizeInfo)  
    // 设置指定单元格的大小  
    void SetCellSize (int row, int col, int num\_rows, int num\_cols)  
    // 获取指定单元格的大小  
    CellSpan GetCellSize (int row, int col, int \*num\_rows, int \*num\_cols) const  
    // 获取单元格的大小  
    wxSize     GetCellSize (const wxGridCellCoords &coords)  
    // 推断制定列大小是否可变  
    bool CanDragColSize (int col) const  
    // 推断表格大小是否可变  
    bool CanDragGridSize () const  
    // 推断制定行大小是否可变  
    bool CanDragRowSize (int row) const  
    // 使指定列大小不能改变  
    void DisableColResize (int col)  
    // 使指定行大小不能改变  
    void DisableRowResize (int row)  
    // 使列大小不能改变  
    void DisableDragColSize ()  
    // 使表格大小不能改变  
    void DisableDragGridSize ()  
    // 使行大小不能改变  
    void DisableDragRowSize ()  
    void EnableDragColSize (bool enable=true)  
    // 设置表格大小是否可变  
    void EnableDragGridSize (bool enable=true)  
    // 设置行大小是否可变  
    void EnableDragRowSize (bool enable=true)  
    // 获取列数  
    int GetNumberCols () const  
    // 获取行数  
    int GetNumberRows () const

 关于边框的API:  
    // 获取指定列的画笔  
    virtual wxPen GetColGridLinePen (int col)  
    // 获取默认的表格边框的画笔  
    virtual wxPen GetDefaultGridLinePen ()  
    // 获取表格边框的颜色  
    wxColour GetGridLineColour () const  
    // 获取行边框的画笔  
    virtual wxPen GetRowGridLinePen (int row)  
    // 表格是否有边框  
    bool GridLinesEnabled () const  
    // 设置表格边框的颜色  
    void SetGridLineColour (const wxColour &colour)

关于表头的API:  
    // 获取指定列标签(表头)的对其方式  
    void GetColLabelAlignment (int \*horiz, int \*vert) const  
    // 获取指定列标签(表头)的文件的方向  
    int GetColLabelTextOrientation () const  
    // 获取制定列标签的内容  
    wxString GetColLabelValue (int col) const  
    // 获取标签(表头)的背景颜色  
    wxColour GetLabelBackgroundColour () const  
    // 获取标签的字体  
    wxFont GetLabelFont () const  
    // 获取标签的文字颜色  
    wxColour GetLabelTextColour () const  
    // 获取行标签的对齐方式  
    void GetRowLabelAlignment (int \*horiz, int \*vert) const  
    // 获取行标签的内容  
    wxString GetRowLabelValue (int row) const  
    // 隐藏标签  
    void HideColLabels ()  
    // 隐藏行标签  
    void HideRowLabels ()  
    // 设置列标签的对齐方式  
    void SetColLabelAlignment (int horiz, int vert)  
    // 设置列标签的文字方向  
    void SetColLabelTextOrientation (int textOrientation)  
    // 设置列标签的内容  
    void SetColLabelValue (int col, const wxString &value)  
    // 设置标签的背景颜色  
    void SetLabelBackgroundColour (const wxColour &colour)  
    // 设置标签的字体  
    void SetLabelFont (const wxFont &font)  
    // 设置标签的文字颜色  
    void SetLabelTextColour (const wxColour &colour)  
    // 设置行标签的对齐方式  
    void SetRowLabelAlignment (int horiz, int vert)  
    // 设置行标签的内容  
    void SetRowLabelValue (int row, const wxString &value)

关于表结构的API:  
    // 追加列  
    bool AppendCols (int numCols=1, bool updateLabels=true)  
    // 追加行  
    bool AppendRows (int numRows=1, bool updateLabels=true)  
    // 删除指定列  
    bool DeleteCols (int pos=0, int numCols=1, bool updateLabels=true)  
    // 删除指定行  
    bool DeleteRows (int pos=0, int numRows=1, bool updateLabels=true)  
    // 插入新列  
    bool InsertCols (int pos=0, int numCols=1, bool updateLabels=true)  
    // 插入新行  
    bool InsertRows (int pos=0, int numRows=1, bool updateLabels=true)

关于选中的API:  
    // 清楚选中状态  
    void ClearSelection ()  
    // 获取选中的单元格  
    wxGridCellCoordsArray GetSelectedCells () const  
    // 获取选中的列  
    wxArrayInt GetSelectedCols () const  
    // 获取选中的行  
    wxArrayInt     GetSelectedRows () const  
    // 获取选中区域的背景颜色  
    wxColour GetSelectionBackground () const  
    // 获取选中区域的前景色  
    wxColour GetSelectionForeground () const  
    // 获取选中模式  
    wxGridSelectionModes GetSelectionMode () const  
    // 推断制定单元格是否被选中  
    bool IsInSelection (int row, int col) const  
    // 推断是否有选中的单元格  
    bool IsSelection () const  
    // 选择整个表格  
    void SelectAll ()  
    // 选择指定的区域  
    void SelectBlock (int topRow, int leftCol, int bottomRow, int rightCol, bool addToSelected=false)  
    // 选择指定的区域  
    void SelectBlock (const wxGridCellCoords &topLeft, const wxGridCellCoords &bottomRight, bool addToSelected=false)  
    // 选择制定的列  
    void SelectCol (int col, bool addToSelected=false)  
    // 选择指定的行  
    void SelectRow (int row, bool addToSelected=false)  
    // 设置选中后的背景颜色  
    void SetSelectionBackground (const wxColour &c)  
    // 设置选中后的前景色  
    void SetSelectionForeground (const wxColour &c)  
    // 设置选中模式  
    void SetSelectionMode (wxGridSelectionModes selmode)

关于格式的API:  
    // 获取制定单元格的对其方式  
    void GetCellAlignment (int row, int col, int \*horiz, int \*vert) const  
    // 获取制定单元格的背景颜色  
    wxColour GetCellBackgroundColour (int row, int col) const  
    // 获取制定单元格的字体  
    wxFont GetCellFont (int row, int col) const  
    // 获取制定单元格的文字颜色  
    wxColour GetCellTextColour (int row, int col) const  
    // 获取指定单元格默认的对齐方式  
    void GetDefaultCellAlignment (int \*horiz, int \*vert) const  
    // 获取单元格默认的背景色  
    wxColour GetDefaultCellBackgroundColour () const  
    // 获取单元格默认的字体  
    wxFont GetDefaultCellFont () const  
    // 获取单元格默认的字体颜色  
    wxColour GetDefaultCellTextColour () const  
    // 设置指定单元格的对齐方式  
    void SetCellAlignment (int row, int col, int horiz, int vert)  
    // 设置指定单元格的对齐方式  
    void SetCellAlignment (int align, int row, int col)  
    // 设置单元格的背景颜色  
    void SetCellBackgroundColour (int row, int col, const wxColour &colour)  
    // 设置单元格的字体  
    void SetCellFont (int row, int col, const wxFont &font)  
    // 设置单元格的字体颜色  
    void SetCellTextColour (int row, int col, const wxColour &colour)  
    // 设置单元格的字体颜色  
    void SetCellTextColour (const wxColour &val, int row, int col)  
    // 设置单元格字体颜色  
    void SetCellTextColour (const wxColour &colour)  
    // 设置单元格默认的对齐方式  
    void SetDefaultCellAlignment (int horiz, int vert)  
    // 设置单元格默认的背景颜色  
    void SetDefaultCellBackgroundColour (const wxColour &colour)  
    // 设置单元格默认的字体  
    void SetDefaultCellFont (const wxFont &font)  
    // 设置单元格默认的字体颜色  
    void SetDefaultCellTextColour (const wxColour &colour)  
    // 使单元格处于仅仅读状态  
    void DisableCellEditControl ()  
    // 设置单元格的编辑状态(可编辑或不可编辑)  
    void EnableCellEditControl (bool enable=true)  
    // 设置表格的编辑状态(可编辑或步可编辑)  
    void EnableEditing (bool edit)  
    // 获取指定单元格的值  
    wxString GetCellValue (int row, int col) const  
    // 获取制定单元格的值  
    wxString GetCellValue (const wxGridCellCoords &coords) const  
    // 当前单元格是否为仅仅读  
    bool IsCurrentCellReadOnly () const  
    // 表格是否为可编辑的  
    bool IsEditable () const  
    // 指定单元格是否为仅仅读  
    bool IsReadOnly (int row, int col) const  
    // 设置指定单元格的值  
    void SetCellValue (int row, int col, const wxString &s)  
    // 设置制定单元格的值  
    void SetCellValue (const wxGridCellCoords &coords, const wxString &s)  
    // 设置制定单元格的值  
    void SetCellValue (const wxString &val, int row, int col)  
    // 设置制定单元格的仅仅读属性  
    void SetReadOnly (int row, int col, bool isReadOnly=true)  
    // 单元格大小自适应  
    void AutoSize ()  
    // 指定列标签大小自适应  
    void AutoSizeColLabelSize (int col)  
    // 指定列大小自适应  
    void AutoSizeColumn (int col, bool setAsMin=true)  
    // 设置列的大小自适应属性  
    void AutoSizeColumns (bool setAsMin=true)  
    // 指定行大小自适应  
    void AutoSizeRow (int row, bool setAsMin=true)  
    // 指定行标签大小自适应  
    void AutoSizeRowLabelSize (int col)  
    // 设置行的大小自适应属性  
    void AutoSizeRows (bool setAsMin=true)  
    // 推断指定列是否是显示的  
    bool IsColShown (int col) const  
    // 推断制定行是否是显示状态  
    bool IsRowShown (int row) const  
    // 设置制定列的最小宽度  
    void SetColMinimalWidth (int col, int width)  
    // 隐藏制定列  
    void HideCol (int col)  
    // 显示指定列  
    void ShowCol (int col)  
    // 设置行的最小高度  
    void SetRowMinimalHeight (int row, int height)  
    // 隐藏指定行  
    void HideRow (int col)  
    // 显示指定行  
    void ShowRow (int col)  
    // 推断单元格大小是否可变  
    bool CanDragCell () const  
    // 设置单元格大小是否可变  
    void EnableDragCell (bool enable=true)    

关于属性的API:  
    // 刷新属性  
    void RefreshAttr (int row, int col)  
    // 设置指定列的属性  
    void SetColAttr (int col, wxGridCellAttr \*attr)  
    // 设置表格外边距  
    void SetMargins (int extraWidth, int extraHeight)  
    // 设置指定行属性  
    void SetRowAttr (int row, wxGridCellAttr \*attr)  
    // 获取单元格属性  
    wxGridCellAttr \* GetOrCreateCellAttr (int row, int col) const  
    // 获取列数  
    int GetNumberCols () const  
    // 获取行数  
    int GetNumberRows () const

关于排序的API:  
    // 推断排序规则是否为ASCII码  
    bool IsSortOrderAscending () const  
    // 设置排序列  
    void SetSortingColumn (int col, bool ascending=true)  
    // 设置列的排序规则  
    void SetColumnsOrder (const wxArrayInt &order)

    // 获取列的最小宽度  
    int GetColMinimalWidth (int col) const  
    // 获取行的最小高度  
    int GetRowMinimalHeight (int col) const

选中模式:  
    wxGridSelectCells  
    wxGridSelectRows  
    wxGridSelectColumns  
    wxGridSelectRowsOrColumns

对齐方式:  
    wxALIGN\_LEFT  
    wxALIGN\_TOP  
    wxALIGN\_RIGHT  
    wxALIGN\_BOTTOM  
    wxALIGN\_CENTER\_VERTICAL  
    wxALIGN\_CENTRE\_VERTICAL  
    wxALIGN\_CENTER  
    wxALIGN\_CENTRE   

具体解释的API介绍见:http://docs.wxwidgets.org/trunk/classwx_grid.html

3. 演示样例代码

    在此我们实现一个4*5的表格,其核心代码例如以下所看到的:   

void CreateTable(wxWindow* parent)
{
char* attr[] = {"姓名", "年龄", "性别", "身高", "体重"};
wxGrid *grid = new wxGrid(parent, wxID_ANY, wxPoint(0, 0), wxSize(580, 310));
// 创建一个8×5的表格
grid->CreateGrid(8, 5);
// 设置默认的行高度
grid->SetDefaultRowSize(35);
// 设置默认的列宽度
grid->SetDefaultColSize(100);
// 设置表头的背景色
grid->SetLabelBackgroundColour(0x228B22);
// 设置表头的颜色
grid->SetLabelTextColour(0xFFFFFF);
// 设置单元格中数据的对其方式
grid->SetDefaultCellAlignment(wxALIGN_CENTER, wxALIGN_CENTRE);
// 设置表头
for (int i = 0; i < 5; i++) { grid->SetColLabelValue(i, wxString::FromUTF8(attr[i]));
}
// 使表格全然显示
parent->Fit();
}