如何正确检测PropertyGrid(MFC)上的值修改?
我一直在用MFC开发一个程序,用我的数据库中的一些数据填充PropertyGrid。 此PropertyGrid中的一个字段包含与人的年龄相关的数据。以下是实现:如何正确检测PropertyGrid(MFC)上的值修改?,mfc,propertygrid,Mfc,Propertygrid,我一直在用MFC开发一个程序,用我的数据库中的一些数据填充PropertyGrid。 此PropertyGrid中的一个字段包含与人的年龄相关的数据。以下是实现: CMFCPropertyGridProperty * pProp = new CMFCPropertyGridProperty(_T("Age"), (variant_t)PropAge->GetNext(headAge), _T("This is a description")); pProp->EnableS
CMFCPropertyGridProperty * pProp = new CMFCPropertyGridProperty(_T("Age"), (variant_t)PropAge->GetNext(headAge), _T("This is a description"));
pProp->EnableSpinControl(TRUE, 0, 150);
pGroup->AddSubItem(pProp);
其中,PropAge
是一个CList
,包含每个人登记簿的年龄(整数)
我的问题是:当我试图修改它的值(使用SpinControl或键入另一个值)时,新值不会以粗体显示。此外,当我使用方法IsModified()
时,它返回false:
void CPropertiesWnd::DoSomething()
{
CMFCPropertyGridProperty * PropSel;
PropSel = m_wndPropList.GetCurSel();
bool a = PropSel->GetSubItem(1)->IsModified(); //SubItem containing the Age data.
//Returns False when it's modified!
//It always returns 'false', even if
//there was made a modification.
}
我使用调试器检查发生了什么,并看到了一些非常有趣的事情:
(注意:m_VarValue
表示当前值,m_VarValueOrig
表示修改前的que值)
如您所见,变量m_VarValue
和m_VarValueOrig
之间存在类型差异。(I4是什么意思?)
我还注意到,这个项目中还有其他子项也涉及数字,它们实际上显示了什么时候
进行了修改。它们的实现是这样的:
pProp = new CMFCPropertyGridProperty(_T("Something"), (_variant_t) 0l, _T(""));
0后面的“l”是什么意思?它与I4类型有关吗?已解决!解决方案实际上非常简单:在创建指向新PropertyGridProperty的指针的第二个参数中,不使用(variant)
,而应该使用(long)
强制转换来正确检测对子项的修改:
CMFCPropertyGridProperty * pProp = new CMFCPropertyGridProperty(_T("Age"), (long)PropAge->GetNext(headAge), _T("This is a description"));