65.9K
CodeProject 正在变化。 阅读更多。
Home

DataGrid 控件

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.31/5 (39投票s)

2005年7月8日

CPOL

2分钟阅读

viewsIcon

198329

downloadIcon

7786

一篇关于不使用 MFC 构建的网格控件的文章。

Example on using DataGrid control

引言

本文介绍了一个不使用 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 设计与上述控件非常相似。

© . All rights reserved.