目 录
1 引言....................................................................................................................... 1
1.1 目的............................................................................................................... 1
1.2 参考资料....................................................................................................... 1
2 GRID 控件介绍....................................................................................................1
2.1 功能介绍....................................................................................................... 1
2.2 框架介绍....................................................................................................... 2
2.3 主要类介绍................................................................................................... 4
2.3.1 CGridCtrl 类.............................................................................................. 4
2.3.2 CGridCellCheck 类................................................................................... 5
2.3.3 CGridCellCombo 类..................................................................................7
2.4 控件类 CGRIDCTRL 常用函数说明............................................................10
行和列的设置..................................................................................... 10
单元格信息设置................................................................................. 12
控件操作............................................................................................. 15
外观和特征设置................................................................................. 20
颜色设置............................................................................................. 23
控件消息介绍..................................................................................... 26
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
3 实例制做............................................................................................................. 27
3.1 实例图片..................................................................................................... 27
3.2 实例制做过程介绍..................................................................................... 27
新建项目............................................................................................. 27
初使化 GridCtrl 控件..........................................................................28
设置固定行和列................................................................................. 30
向单元格插入图片............................................................................. 31
3.2.1
3.2.2
3.2.3
3.2.4
3.2.5
3.2.6
3.2.7
3.2.8
设置 CheckBox 列.............................................................................. 32
设置 ComboBox 列.............................................................................33
设置行背景颜色和列背景颜色......................................................... 34
添加消息处理..................................................................................... 35
4 实例以外的思考................................................................................................. 36
II
1 引言
1.1 目的
本文记录了作者在学习了解并使用 GridCtrl 的过程中的心得体会,希望能够
对今后学习使用 GridCtrl 控件的其他同事有所帮助,使其更快上手。
1.2 参考资料
1) CGridCtrl 学习指南
网址:http://lizhilin.happy.blog.163.com/blog/static/21769242200822911559438/
2) CGridCtrl 使用详解
网址:http://blog.csdn.net/incwar/archive/2009/01/17/3807283.aspx
3) CGridCtrl 源代码一份。需要的同事,可以 OA 上发邮件给我。
4) 作者亲手制做的对于 CGridCtrl 的使用实例:GridCtrlTest。需要的同事,可
以 OA 上发邮件给我。
2 Grid控件介绍
2.1 功能介绍
GridControl 控件是一款非常优秀的网格控件,在 VC 平台上的用途非常广
泛也非常灵活。可以将其看做上是在 CListCtrl 基础上的定制和延伸。
GridControl 具备以下操作和功能:
使用鼠标可以进行单元格的选择,还可以辅助 ctrl 和 shift 的组合键进行选
择。也可以取消选择。
单元格可以有不同文本和背景颜色的个性化设置
单元格可以有字体的个性化设置
单元格可以标注"只读"或者其他的状态设置及检测
单元格的拖放动作
1
可以对任何列或行固定
Ctrl-C, Ctrl-X 和 Ctrl-V 执行拷贝、剪切、粘贴操作,Ctrl-A 全选
当单元格成为焦点,并且在单元格的编辑区域按下字符键,就意味着在
那个单元格进行编辑了
可以在单元格中加入图片
对大型数据可以使用"虚拟"模式
充分的打印支持,支持文档/浏览环境(包括打印预览)或是基于会话的应用
(不支持打印预览)
可选的"列表模式",包括对行的全选或单选,还有单击列标题提示进行插入的
操作。
众多的虚函数可以很容易对控件进行功能扩充
单元格的标题提示太小不能显示数据
可以隐藏行和列
行和列可以按照大小进行重排,还可以取消对行、列或两者的排序。
双击区分点,行或者列可以按照大小自动排序
2.2 框架介绍
GridControl 包含一个拖曳对象(CGridDropTarget)和一个标题提示对象
(CTitleTip),前者处理拖曳操作,后者在单元格物理空间在最大限度内不足以
显示其内容时可以显示出其内容。而 CCellID 类是一个用来参考单元格范围的便
利的辅助类。此外,GridControl 还包含从 CGridCell 派生下来的单元格对象。
2
图 1
Grid 单元格可以是任何类型,这些类型都是从 CGridCell 派生下来的,基
类中定义了基本的数据存储和编辑操作。扩充的两个类 CgridCellCombo 和
CGridLCellCheck 示范了如何创建自己的单元格类。
图 2
单元格有两种主要状态即固定和非固定。固定的单元格通常在 Grid 的左上
方,并且不会随着 Grid 的卷动而移动,并且不能进行编辑,通常即这些单元格
包含列和行的标题部分。而非固定的单元格构成了 Grid 的内部,你可以对它进
行编辑和选择。
3
2.3 主要类介绍
2.3.1 CGridCtrl 类
CGridCtrl 是控件类,派生于 CWnd 类,代表整个网格对象,具备了针对网格
的所有基本操作,如设置网格行和列,设置网格外观,设置单元格信息等。
下面介绍控件初使化过程中的一个重要函数 CGridCtrl::Create:
函数申明:BOOL CGridCtrl::Create(const RECT& rect, CWnd* pParentWnd, UINT nID,
DWORD dwStyle)
函数作用:创建控件
参数说明:
rect:控件位置信息
pParetWnd:父窗口指针
nID:为控件指定的 ID,作为本次创建的控件对象的标识
dwStyle:控件风格,默认值为:WS_CHILD | WS_BORDER | WS_TABSTOP
| WS_VISIBLE。 常用风格请参见下表:
控件风格 ID
WS_CHILD
说明
说明窗口为子窗口
WS_OVERLAPPED
重叠窗口,通常有标题条和边界
WS_POPUP
WS_BORDER
WS_VISIBLE
WS_DISABLED
WS_VSCROLL
WS_HSCROLL
弹出式窗口,不能与 WS_CHILD 一起使用
有边界
窗口可见
初使状态为禁止
具有垂直滚动条
具有水平滚动条
WS_TABSTOP
可用 TAB 键移动到下一个具有 WS_TABSTOP 风格的控件
结果返回:成功返回 TRUE;失败则返回 FALSE
注:关于 CGridCtrl 的其它常用函数请参见本文 2.4
4
2.3.2 CGridCellCheck 类
CGridCellCheck 继承于 CGridCell,是一个复选框风格的单元格类。
2.3.2.1 主要函数
1)GetCellExtent (重载)
函数申明:virtual CSize GetCellExtent(CDC* pDC);
函数作用:获得单元格大小
参数说明:
pDC: 设备对象指针
结果返回:CSize 对象,描述单元格大小
2) OnClick (重载)
函数申明:virtual void OnClick( CPoint PointCellRelative);
函数作用:单击时,改变复选框状态
参数说明:
PointCellRelative: 单元格的相对坐标
结果返回:void
3) GetTextRect(重载)
函数申明:virtual BOOL GetTextRect( LPRECT pRect);
函数作用:获取单元格文本的位置信息
参数说明:
pRect: 输出文本的位置信息
结果返回:成功返回 TRUE;失败返回 FALSE
4) Draw(重载)
函数申明:virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect,
BOOL bEraseBkgnd);
函数作用:根据当前复选框的状态重绘复选框
参数说明:
5
pDC : 设备对象指针
nRow: 指定行 Index
nCol: 指定列 Index
rect: 重绘区域
bEraseBkgnd: 重绘前是否擦除背景
结果返回:成功返回 TRUE;失败返回 FALSE
5) SetCheck
函数申明:void CGridCellCheck::SetCheck(BOOL bChecked)
函数作用:设置复选框的状态
参数说明:
bChecked:设置复选框的状态
结果返回:void
6) GetCheck
函数申明:BOOL
CGridCellCheck::GetCheck()
函数作用:获取复选框的状态
参数说明:
bChecked:设置复选框的状态
结果返回:复选框被选中,返回 TRUE;否则返回 FALSE
2.3.2.2 设置单元格类型
若要设置某一个单元格为复选框类型,则需调用:
BOOL CGridCtrl::SetCellType(int nRow, int nCol, CRuntimeClass* pRuntimeClass)
若要让所有新创建的单元格都是复选框类型的的,则需调用:
BOOL CGridCtrl::SetDefaultCellType( CRuntimeClass* pRuntimeClass)
注:详情参见:本文章节2.4.2
6