2.3.3
CGridCellCombo类... 7
2.4
控件类CGridCtrl常用函数说明... 10
2.4.1
行和列的设置...
10
2.4.2
单元格信息设置...
13
2.4.3
控件操作...
16
2.4.4
外观和特征设置...
20
2.4.5
颜色设置...
24
2.4.6
控件消息介绍...
26
3
实例制做... 28
3.1
实例图片...
28
3.2
实例制做过程介绍...
28
3.2.1
新建项目...
28
3.2.2
初使化GridCtrl控件... 29
3.2.3
设置固定行和列...
31
3.2.4
向单元格插入图片...
32
3.2.5
设置CheckBox列... 33
3.2.6
设置ComboBox列... 34
3.2.7
设置行背景颜色和列背景颜色... 36
3.2.8
添加消息处理...
37
4
实例以外的思考... 38
本文记录了作者在学习了解并使用GridCtrl的过程中的心得体会,希望能够对今后学习使用GridCtrl控件的其他同事有所帮助,使其更快上手。
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上发邮件给我。
GridControl控件是一款非常优秀的网格控件,在VC平台上的用途非常广泛也非常灵活。可以将其看做上是在CListCtrl基础上的定制和延伸。
GridControl具备以下操作和功能:
u
使用鼠标可以进行单元格的选择,还可以辅助ctrl和shift的组合键进行选
择。也可以取消选择。
u
单元格可以有不同文本和背景颜色的个性化设置
u
单元格可以有字体的个性化设置
u
单元格可以标注'只读'或者其他的状态设置及检测
u
单元格的拖放动作
u
可以对任何列或行固定
u
Ctrl-C,
Ctrl-X和Ctrl-V执行拷贝、剪切、粘贴操作,Ctrl-A全选
u
当单元格成为焦点,并且在单元格的编辑区域按下字符键,就意味着在
那个单元格进行编辑了
u
可以在单元格中加入图片
u
对大型数据可以使用'虚拟'模式
u
充分的打印支持,支持文档/浏览环境(包括打印预览)或是基于会话的应用(不支持打印预览)
u
可选的'列表模式',包括对行的全选或单选,还有单击列标题提示进行插入的操作。
u
众多的虚函数可以很容易对控件进行功能扩充
u
单元格的标题提示太小不能显示数据
u
可以隐藏行和列
u
行和列可以按照大小进行重排,还可以取消对行、列或两者的排序。
u
双击区分点,行或者列可以按照大小自动排序
GridControl包含一个拖曳对象(CGridDropTarget)和一个标题提示对象(CTitleTip),前者处理拖曳操作,后者在单元格物理空间在最大限度内不足以显示其内容时可以显示出其内容。而CCellID类是一个用来参考单元格范围的便利的辅助类。此外,GridControl还包含从CGridCell派生下来的单元格对象。
图1
Grid单元格可以是任何类型,这些类型都是从CGridCell派生下来的,基类中定义了基本的数据存储和编辑操作。扩充的两个类CgridCellCombo和CGridLCellCheck示范了如何创建自己的单元格类。
图2
单元格有两种主要状态即固定和非固定。固定的单元格通常在Grid的左上方,并且不会随着Grid的卷动而移动,并且不能进行编辑,通常即这些单元格包含列和行的标题部分。而非固定的单元格构成了Grid的内部,你可以对它进行编辑和选择。
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_CHILD一起使用
|
WS_BORDER
|
有边界
|
WS_VISIBLE
|
窗口可见
|
WS_DISABLED
|
初使状态为禁止
|
WS_VSCROLL
|
具有垂直滚动条
|
WS_HSCROLL
|
具有水平滚动条
|
WS_TABSTOP
|
可用TAB键移动到下一个具有WS_TABSTOP风格的控件
|
结果返回:成功返回TRUE;失败则返回FALSE
注:关于CGridCtrl的其它常用函数请参见本文2.4
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);
函数作用:根据当前复选框的状态重绘复选框
参数说明:
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
CGridCellCombo继承于CGridCell,是一个下拉框风格的单元格类。
2.3.3.1
主要函数
1)GetCellExtent (重载)
函数申明:virtual CSize GetCellExtent(CDC* pDC);
函数作用:获得单元格大小
参数说明:
pDC: 设备对象指针
结果返回:CSize对象,描述单元格大小
2) Edit (重载)
函数申明:virtual BOOL
Edit(int nRow, int nCol, CRect rect,
CPoint point, UINT nID, UINT nChar);
函数作用:用户触发此事件,控件进入编辑状态。本质上就是创建ComboBox控件来负责编辑
参数说明:
nRow:
指定行Index
nCol:
指定列Index
rect: 编辑区域
point: 无意义