DataGrid 控件
一篇关于不使用 MFC 构建的网格控件的文章。
引言
本文介绍了一个不使用 MFC 构建的数据网格控件。它可以在 SDK 或 MFC Win32 应用程序中使用。此源代码也使用 GNU 编译器编译,并且已被证明是稳定的。
背景
您可以在互联网上找到各种网格控件,有些是免费的,有些则不是。此外,Chris Maunder 撰写了一篇关于可在不同平台(ATL 和 MFC 版本)上使用的网格控件的文章。网格控件对于表示二维表格数据非常有用。它们通常用于会计应用程序。网格控件必须设计为快速数据引用和修改。本文介绍的网格控件支持最多 32000 行和 1000 列。同时,可以创建最多 20 个网格控件。这些值可以在数据网格头文件中更改,但始终存在内存限制。
使用代码
要使用数据网格控件,必须在项目中包含一个头文件。
#include "DataGrid.h"
接下来,创建 CDataGrid
类的实例并调用 Create()
方法。
// hParentWnd is declared somewhere else // CDataGrid dataGrid; int numCols = 5; RECT rect = {0,0,500,300}; dataGrid.Create( rect, hParentWnd, numCols );
使用 SetColumnInfo()
方法描述数据网格控件的列。
int colIndex = 0; char colText[] = "Column1"; int colSize = 120; UINT txtAlign = DGTA_LEFT; dataGrid.SetColumnInfo( colIndex, colText, colSize, txtAlign );
要将项目添加到数据网格控件,请调用 InsertItem()
方法。
char itemText[] = "Item1"; dataGrid.InsertItem( itemText, txtAlign );
要描述子项目,请使用 SetItemInfo()
方法。
int rowIndex = 0; int columnIndex = 0; char subitemText[] = "Subitem1"; bool readOnly = false; dataGrid.SetItemInfo( rowIndex, columnIndex, subitemText, txtAlign, readOnly );
数据网格控件通过 WM_COMMAND
消息发送通知消息。这些通知是
- 项目已更改
- 项目文本已更改
- 项目已添加
- 项目已删除
- 列已调整大小
- 列已单击
- 排序已开始
- 排序已结束
这是此控件的基本用法。请参阅演示项目作为示例。数据网格控件支持以下功能
- 网格显示(启用/禁用)
- 列调整大小(启用/禁用)
- 项目文本编辑(启用/禁用)
- 项目排序(启用/禁用)
- 获取/设置行背景颜色
- 获取/设置行文本颜色
- 获取/设置行字体
- 获取/设置列文本颜色
- 获取/设置列字体
- 设置应用程序定义的排序函数
关注点
我的目标是尝试开发一个网格控件,该控件将支持 CListCtrl
控件的大部分功能,甚至更多,并且尽可能高效。它的 GUI 设计与上述控件非常相似。