如何正确检测PropertyGrid(MFC)上的值修改?

如何正确检测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

我一直在用MFC开发一个程序,用我的数据库中的一些数据填充PropertyGrid。 此PropertyGrid中的一个字段包含与人的年龄相关的数据。以下是实现:

 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"));