CGridCtrl控件类的用法

  

开源的CGridCtrl类,是VC中的可用的表格控件。相对VC自带的CListCtrl网格控件功能要强很多。但是除原工程代码自带的示例外,很少有完整描述使用的过程。在VC2015中的用法如下:

(1)先将源代码的中的GridCtrl_src文件夹和NewCellTypes文件夹复制到当前新建工程源代码目录下。

在窗口的。h文件中添加:

# include “GridCtrl_src \ GridCtrl.h"

在窗口的。cpp文件中添加:

# include “NewCellTypes/GridURLCell.h"   # include “NewCellTypes/GridCellCombo.h"   # include “NewCellTypes/GridCellCheck.h"   # include “NewCellTypes/GridCellNumeric.h"   # include “NewCellTypes/GridCellDateTime.h"

(2)在对话框上添加一个自定义控件(自定义控件)将ID设为:IDC_GRID

在窗口中,添加关联变量:CGridCtrl m_Grid;

控件类属性为:MFCGridCtrl

(3)在窗口的OnInitDialog函数中,添加如下代码:

fillData ();   m_Grid.GetDefaultCell(假,假)→SetBackClr (RGB (0 xff,, 0 xff,, 0 xe0));   m_Grid.SetFixedColumnSelection(真正的);   m_Grid.SetFixedRowSelection(真正的);   m_Grid.EnableColumnHide ();   m_Grid.AutoSize ();   m_Grid.SetCompareFunction (CGridCtrl:: pfnCellNumericCompare);   m_Grid.SetTrackFocusCell(假);//填充数据   VOID  Ctest1Dlg:: fillData ()   {   INT  m_nFixCols =, 0;   INT  m_nFixRows =, 1;   INT  m_nCols ,,,=, 6;   INT  m_nRows ,,,=, 16;   m_Grid.SetAutoSizeStyle ();   试一试   {   m_Grid.SetRowCount (m_nRows);,,,,,,,,,,,,//设置行数   m_Grid.SetColumnCount (m_nCols);,,,,,,,,,//设置列数   m_Grid.SetFixedRowCount (m_nFixRows);,,,,//固定行   m_Grid.SetFixedColumnCount (m_nFixCols);,//固定列   }   抓住(CMemoryException, e)   {   e→ReportError ();   返回;   }   END_CATCH//用文本填充行列数据   时间=for  (int  row  0;, row  & lt;, m_Grid.GetRowCount();,行+ +)   {   时间=for  (int  col  0;, col  & lt;, m_Grid.GetColumnCount();,坳+ +)   {   CString  str;      GV_ITEM 项目;      时间=Item.mask  GVIF_TEXT;   时间=Item.row 行;   Item.col =,上校;      if  (row  & lt;, m_nFixRows)   str.Format (_T(“列,% d"),,上校);   else  if  (col  & lt;, m_nFixCols)   str.Format (_T(“行,% d"),,行);   其他的   str.Format (_T (“% d"),行*坳);      Item.strText =, str;      if  (rand (), %, 10,==, 1)   {//设置部分单元格颜色   COLORREF  clr =, RGB (rand (), %,, 128 +, 128,,   ,,,,,,,,,,,,,,,,,,rand (), %,, 128 +, 128,,   ,,,,,,,,,,,,,,,,,,rand (), %,, 128 +, 128);   Item.crBkClr =, clr;//或者m_Grid.SetItemBkColour(行,,,上校,clr);   Item.crFgClr =, RGB (255, 0, 0);//或者m_Grid.SetItemFgColour(行,,,上校,RGB (255, 0, 0));   Item.mask  |=, (GVIF_BKCLR  |, GVIF_FGCLR);   }   m_Grid.SetItem(及项目);   }   }   }

(4)编译时提示:C4996: & # 39; GetVersionExW& # 39;:被声明为已否决

处理方法如下:

1。项目属性比;配置属性比;C/c++比;一般比;SDL检查关掉

2。# pragma警告(禁用:4996),,,,,

3。/wd 4996

任选一种方法即可。

(5)清空表格控件

m_Grid.DeleteAllItems();//全部清空

m_Grid.DeleteNonFixedRows ();//保留标题行,其他删除

(6)表格编辑事件处理

//添加事件映射   BEGIN_MESSAGE_MAP (Ctest1Dlg, CDialogEx)   ON_NOTIFY (GVN_ENDLABELEDIT、IDC_GRID和Ctest1Dlg: OnEditCell)   END_MESSAGE_MAP ()

。h头文件中添加:

afx_msg  VOID  OnEditCell (NMHDR  *, pNMHDR,, LRESULT  * pResult);

。cpp文件中添加代码如下:

VOID  Ctest1Dlg: OnEditCell (NMHDR  *, pNMHDR,, LRESULT  * pResult)   {//事件处理   NM_GRIDVIEW  *, pItem =, (NM_GRIDVIEW *) pNMHDR;      CString 年代;   s.Format (_T(“您编辑了% d行,% d列“),,pItem→iRow  +, 1, pItem→iColumn  +, 1);      CString  str =, m_Grid.GetItemText (pItem→iRow,, pItem→iColumn);   AfxMessageBox (str);//return  Ctest1Dlg:: OnNotify(按钮,lParam,, pResult);   }

(7)禁止表格编辑

m_Grid.SetEditable(假);

(8)删除一行

m_Grid.DeleteRow (m_nSelectGrid);

CGridCtrl控件类的用法