0

我一直在 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_age (integer) of each person's register

这是我的问题:当我尝试修改它的值(使用 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.  
}

我使用调试器检查发生了什么,并看到了一些非常有趣的东西:

http://img836.imageshack.us/img836/8256/c90j.jpg

(注:m_VarValue代表当前值,m_VarValueOrig代表修改前的que值)

如您所见,变量m_VarValue和之间存在类型差异m_VarValueOrig。(I4 是什么意思?)

我还注意到该项目中还有其他子项也处理数字,它们实际上显示了何时进行了修改。他们的实现是这样的:

 pProp = new CMFCPropertyGridProperty(_T("Something"), (_variant_t) 0l, _T(""));

0 之后的这个“l”是什么意思?和I4类型有关系吗?

4

1 回答 1

0

解决了!解决方案实际上非常简单:不是(variant_t)在创建指向新 PropertyGridProperty 的指针的第二个参数中使用 a,而是(long)应该使用强制转换来正确检测对 SubItem 的修改:

CMFCPropertyGridProperty * pProp = new CMFCPropertyGridProperty(_T("Age"), (long)PropAge->GetNext(headAge), _T("This is a description")); 
于 2013-06-29T17:20:31.817 回答