CGridCtrl学习指南(5)

2020-08-23 20:21

控制单元格是否可以编辑,或者是否保存或放弃修改的方法有好几种。

最简单的方法就是使用SetEditable(BOOL)。这个函数决定了Grid中的单元格是否可以编辑。可以通过在特定单元格中使用GVIS_READONLY来实现更好的控制。

int row = 1;

int col = 10;

m_Grid.SetItemState(row,col, m_Grid.GetItemState(row,col) | GVIS_READONLY);

深层的控制可以通过处理GVN_BEGINLABELEDIT消息来实现。如果消息的返回值小于0,那么试图对指定单元格所做的修改将被取消同时,这个单元格将被看作是只读属性的。当每次试图编辑某一个单元格时都会发送一个这种消息。

为处理这个消息,需要在主窗口中增加一个句柄:

BEGIN_MESSAGE_MAP(CGridCtrlDemoDlg, CDialog) ...

// 增加句柄

ON_NOTIFY(GVN_ENDLABELEDIT, IDC_GRID, OnGridEndEdit)

END_MESSAGE_MAP()

...

// GVN_ENDLABELEDIT

void CGridCtrlDemoDlg::OnGridStartEdit(NMHDR *pNotifyStruct,

LRESULT* pResult) {

NM_GRIDVIEW* pItem = (NM_GRIDVIEW*) pNotifyStruct;

// 如果你允许对单元格进行编辑,那么虚构函数AllowCellToBeEdited将返回TRUE

BOOL bAllowEdit = AllowCellToBeEdited(pItem->iRow, pItem->iColumn);

*pResult = (bAllowEdit)? 0 : -1; }

可以通过相同的方法处理GVN_ENDLABELEDIT消息来实现是保存还是放弃对单元格的编辑行为。

// GVN_ENDLABELEDIT

void CGridCtrlDemoDlg::OnGridEndEdit(NMHDR *pNotifyStruct,

LRESULT* pResult) {

NM_GRIDVIEW* pItem = (NM_GRIDVIEW*) pNotifyStruct;

// 如果你想保存对单元格的修改,那么虚构函数AcceptChange将返回TRUE

BOOL bAcceptChange = AcceptChange(pItem->iRow, pItem->iColumn);

*pResult = (bAcceptChange)? 0 : -1; }

你所能用的最终的确认方法是源于CGridCellBase类,并重载ValidateEdit方法的。如果它返回的是TRUE,那么表示保存修改,否则表示放弃修改。

声名

如果没有下面这些作者的免费代码,这些工作将不会成功。

Joe Willcoxson:我的工作依赖于 Joe的原始代码,它提供了这个控件的基本结构。

Keith Rule:Keith有一个很灵巧的类CMemDC,它能很容易的处理闪烁显示工作。他还提供了copy/paste/drag/drop对象源代码。

Ravi Reddy:我使用了Ravi的一个列表浏览打印代码。

Zafir Anjum:他为我提供了CInPlaceEdit的切入点,并且提供了排序程序和标题提示的源代码。

Eric Woodruff, Brian V. Shifrin, Scot Reed, Aqiruse, Ken Bertelson, Martin Daly帮助我把控件升级到2.X版本--还有很多在以前版本中提供帮助的人。


CGridCtrl学习指南(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:数据库原理重点总结

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: