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)在对话框上添加一个自定义控件(Custom Control)将ID设为:IDC_GRID

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

控件Class属性为:MFCGridCtrl

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

fillData();
m_Grid.GetDefaultCell(FALSE, FALSE)->SetBackClr(RGB(0xFF, 0xFF, 0xE0));
m_Grid.SetFixedColumnSelection(TRUE);
m_Grid.SetFixedRowSelection(TRUE);
m_Grid.EnableColumnHide();
m_Grid.AutoSize();
m_Grid.SetCompareFunction(CGridCtrl::pfnCellNumericCompare);
m_Grid.SetTrackFocusCell(FALSE);
//填充数据
VOID Ctest1Dlg::fillData()
{
	INT m_nFixCols = 0;
	INT m_nFixRows = 1;
	INT m_nCols    = 6;
	INT m_nRows    = 16;
	m_Grid.SetAutoSizeStyle();
	TRY
	{
		m_Grid.SetRowCount(m_nRows);            //设置行数
		m_Grid.SetColumnCount(m_nCols);         //设置列数
		m_Grid.SetFixedRowCount(m_nFixRows);    //固定行
		m_Grid.SetFixedColumnCount(m_nFixCols); //固定列
	}
	CATCH(CMemoryException, e)
	{
		e->ReportError();
		return;
	}
	END_CATCH

	//用文本填充行列数据
	for (int row = 0; row < m_Grid.GetRowCount(); row++)
	{
		for (int col = 0; col < m_Grid.GetColumnCount(); col++)
		{
			CString str;

			GV_ITEM Item;

			Item.mask = GVIF_TEXT;
			Item.row = row;
			Item.col = col;

			if (row < m_nFixRows)
				str.Format(_T("列 %d"), col);
			else if (col < m_nFixCols)
				str.Format(_T("行 %d"), row);
			else
				str.Format(_T("%d"), row*col);

			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(row, col, clr);
				Item.crFgClr = RGB(255, 0, 0);
				//或者m_Grid.SetItemFgColour(row, col, RGB(255,0,0));
				Item.mask |= (GVIF_BKCLR | GVIF_FGCLR);
			}
			m_Grid.SetItem(&Item);
		}
	}
}

(4)编译时提示:C4996: 'GetVersionExW': 被声明为已否决

处理方法如下:

1.Project Properties > Configuration Properties > C/C++ > General > SDL checks关掉

2.#pragma warning(disable: 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()

头文件中添加:

afx_msg VOID OnEditCell(NMHDR * pNMHDR, LRESULT *pResult);
VOID Ctest1Dlg::OnEditCell(NMHDR * pNMHDR, LRESULT *pResult)
{//事件处理
	NM_GRIDVIEW * pItem = (NM_GRIDVIEW*)pNMHDR;

	CString s;
	s.Format(_T("您编辑了%d行,%d列"), pItem->iRow + 1, pItem->iColumn + 1);

	CString str = m_Grid.GetItemText(pItem->iRow, pItem->iColumn);
	AfxMessageBox(str);
}

原文地址:http://blog.51cto.com/9233403/2122176

时间: 2024-10-29 00:59:47

CGridCtrl控件类的用法的相关文章

百度 flash html5自切换 多文件异步上传控件webuploader基本用法

双核浏览器下在chrome内核中使用uploadify总有302问题,也不知道如何修复,之所以喜欢360浏览器是因为帮客户控制渲染内核: 若页面需默认用极速核,增加标签:<meta name="renderer" content="webkit"> 若页面需默认用ie兼容内核,增加标签:<meta name="renderer" content="ie-comp"> 若页面需默认用ie标准内核,增加标签

[Swift学习]UIKit学习之滑块控件UISlider的用法

UIKit学习之滑块控件UISlider的用法 Slider: Sliders enable users to interactively modify some adjustable value in an app, such as speaker volume or screen brightness. UISlider: A UISlider object is a visual control used to select a single value from a continuous

VC单选按钮控件(Radio Button)用法

先为对话框加上2个radio button,分别是Radio1和Radio2. 问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了? 关键是选上,“默认”只要放在OnInitDialog()即可.三种方法可以让它选上, 第一种:((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//选上((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE);//不选上((CButton

WPF的ListView控件自定义布局用法实例

本文实例讲述了WPF的ListView控件自定义布局用法.分享给大家供大家参考,具体如下: 概要: 以源码的形式贴出,免得忘记后,再到网上查资料.在VS2008+SP1环境下调试通过 引用的GrayscaleEffect模块,可根据参考资料<Grayscale Effect...>中的位置下载. 正文: 如何布局是在App.xaml中定义源码如下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

【WPF学习】第十九章 控件类

原文:[WPF学习]第十九章 控件类 WPF窗口充满了各种元素,但这些元素中只有一部分是控件.在WPF领域,控件通常被描述为与用户交互的元素--能接收焦点并接受键盘或鼠标输入的元素.明显的例子包括文本框和按钮.然而,这个区别有时有些模糊.将工具提示视为控件,因为它根据用户鼠标的移动显示或消失.将标签视为控件,因为它支持记忆码(mnemonics,将焦点转移到相关控件快捷键). 所有控件都继承自System.Windows.Control类,该类添加了一小部分基本的基础结构: 设置控件内容对齐方式

delphi中的XML解析控件TXMLDocument的用法

Delphi中TXMLDocument控件的用法 Delphi中对XML文件的解析做的很好,比直接使用MS的MSXML2_TLB中的接口要方便很多,现称述于下面. 在讲之前先给出一个XML实例,在讲某些部分是要结合实例比较容易理解. 1<?xmlversion="1.0"encoding="gb2312"?><!--文档版本信息,注释格式同HTML--> 2<XMLPackage> 3<clinetinfoip=”202.1

Delphi xe5 控件TIdhttp的用法post,get解决中文乱码问题

网络接口如下图: 浏览器演示如下:http://xxx.xxx.xxx.xxx/web/login!doLogin?data={"password":"yy123","userCode":"yyy123","terminalCode":"123"} 返回信息是一个json格式的字符串:{"errorMsg":"登录成功!","result

时间控件My97简单用法

my97的用法很是简单,项目中用到,查了资料才找到的,简单使用,记一下,方便查阅. 1.添加依赖. <script language="javascript" type="text/javascript" src="My97DatePicker/WdatePicker.js"></script>注意的是,不能单单的引入WdatePicker.js,要把整个My97DatePicker因进去. 2.使用最简单,这是官网dem

第一篇:初识ASP.NET控件开发_第一节:控件类及其继承关系

1)System.Web.UI.Control(以下简称Control) Control 类是包括自定义控件.用户控件和页在内的所有 ASP.NET 服务器控件的基类..定义由所有 ASP.NET 服务器控件共享的属性.方法和事件. 命名空间:System.Web.UI程序集:System.Web(在 system.web.dll 中) 2)System.Web.UI.WebControls.WebControl(以下简称WebControl) WebControl 类是 System.Web.