wxWidgets之wxGrid控件

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();
}     
原文地址:https://www.cnblogs.com/yangykaifa/p/6790031.html