如何更新 CMFCPropertyGridCtrl 的属性?

How to update the properties of CMFCPropertyGridCtrl?

我正在开发一个通过 MFC 将数据模型和用户界面绑定在一起的应用程序,我正在尝试使用 CMFCPropertyGridCtrl 来显示和编辑从数据 model.Then 中提取的数据完成对 CMFCPropertyGridCtrl 上显示的属性的编辑后,我需要将新更新的数据移回数据模型。执行此操作时,我需要在执行数据传输之前检查 CMFCPropertyGridCtrl 中的数据是否真的已更新。我通过检查 IsModified 方法的 return 值来实现它。但是在我将数据移回数据模型后,CMFCPropertyGridCtrl 不会自行更新其属性。所以 IsModified 方法永远不会起作用,因为它只是将当前值与初始值进行比较,而不是更新后的值。我该如何解决这个问题?

CMFCPropertyGridCtrl::OnPropertyChanged 旨在跟踪 属性 中的更改并将更改反映到您的系统中。此虚函数由 CMFCPropertyGridProperty::OnUpdateValue 调用。

因为 m_bModified 在这里讨论了一些关于它的话,因为它有时会引起混淆: m_bModified被函数CMFCPropertyGridProperty::ResetOriginalValue清除!在这种情况下 m_varValueOrig 被设置回 属性。原始值可能会被 SetOriginalValue 更改。

所以检查和跟踪更改的唯一好位置是 CMFCPropertyGridCtrl::OnPropertyChanged。如果更改 属性,则 IsModified 为真。但这只是与原始值相比...

如果您正在更新值并希望以粗体文本查看您的修改,那么在初始化阶段使用 CMFCPropertyGridProperty::SetValueCMFCPropertyGridProperty::SetOriginalValue 是有意义的。

但是下次你想更新你的值时使用CMFCPropertyGridProperty::SetValue然后手动调用CMFCPropertyGridCtrl::OnPropertyChanged( pointer to your property )

该函数将调用 protected SetModifiedFlag() 函数,该函数又会更新 protected m_bIsModified 以具有正确的值。