CGridCtrl控件类的用法-创新互联

开源的CGridCtrl类,是VC中的可用的表格控件。相对VC自带的CListCtrl网格控件功能要强很多。但是除原工程代码自带的示例外,很少有完整描述使用的过程。在VC2015中的用法如下:

创新互联公司专注于中大型企业的成都做网站、成都网站制作和网站改版、网站营销服务,追求商业策划与数据分析、创意艺术与技术开发的融合,累计客户上千余家,服务满意度达97%。帮助广大客户顺利对接上互联网浪潮,准确优选出符合自己需要的互联网运用,我们将一直专注品牌网站制作和互联网程序开发,在前进的路上,与客户一起成长!

(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()

.h头文件中添加:


afx_msg VOID OnEditCell(NMHDR * pNMHDR, LRESULT *pResult);

.cpp文件中添加代码如下:

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);
	
	//return Ctest1Dlg::OnNotify(wParam, lParam, pResult);
}

(7)禁止表格编辑

m_Grid.SetEditable(FALSE);

(8)删除一行

m_Grid.DeleteRow(m_nSelectGrid);

(9)右键菜单


在窗口类中,添加如下代码:

//1020为CGridCtrl的资源ID
ON_NOTIFY(NM_RCLICK, 1020, &CScale3DCTotalTableView::OnDelMenu)
VOID CScale3DCTotalTableView::OnDelMenu(NMHDR * pNMHDR, LRESULT *pResult)
{
	NM_GRIDVIEW * pItem = (NM_GRIDVIEW*)pNMHDR;

	m_nSelectGrid = pItem->iRow;

	POINT pt;
	GetCursorPos(&pt);


	CMenu menu;
	menu.LoadMenu(IDR_MENU1);
	CMenu * pPopup = menu.GetSubMenu(0);
	ScreenToClient(&pt);

	CRect rt;
	this->GetWindowRect(rt);

	pPopup->TrackPopupMenu(TPM_RIGHTBUTTON | TPM_RIGHTBUTTON, 
	    pt.x + rt.left, rt.top + pt.y, this);

	*pResult = 0;
}

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

文章标题:CGridCtrl控件类的用法-创新互联
文章网址:https://www.cdcxhl.com/article8/ihgip.html

成都网站建设公司_创新互联,为您提供网站策划外贸建站网站导航品牌网站设计虚拟主机用户体验

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

搜索引擎优化