gpt4 book ai didi

c++ - 重新实现 CMFCPropertyGridProperty 类 (MFC) 的最佳方式

转载 作者:行者123 更新时间:2023-11-30 01:19:43 29 4
gpt4 key购买 nike

几天前,我试图实现一种方法来检测属性窗口 (CPropertiesWnd) 中的值何时更新,并在我的 MFC 应用程序中执行一些其他操作。因为我主要使用 CMFCPropertyGridProperty 实例来处理我的属性窗口中包含的信息,所以我决定实现方法 BOOL CMFCPropertyGridProperty::OnUpdateValue()(虚拟),只要我的属性网格中的某些内容发生变化,框架就会自动调用该方法。因此,由于我无法修改 CMFCPropertyGridProperty 类(以及其他文件,如 afxpropertygridctrl.h ),我创建了一个辅助类来这样做:

#pragma once


// CMFCPropertyGridPropertyAux

class CMFCPropertyGridPropertyAux : public CMFCPropertyGridProperty
{
public:

CMFCPropertyGridPropertyAux(const CString& strGroupName, DWORD_PTR dwData=0, BOOL bIsValueList=FALSE);
CMFCPropertyGridPropertyAux(const CString& strName, const COleVariant& varValue, LPCTSTR lpszDescr = NULL, DWORD_PTR dwData = 0,
LPCTSTR lpszEditMask = NULL, LPCTSTR lpszEditTemplate = NULL, LPCTSTR lpszValidChars = NULL);
virtual ~CMFCPropertyGridPropertyAux();
BOOL OnUpdateValue();
};


// MFCPropertyGridPropertyAux.cpp : implementation file
//

#include "stdafx.h"
#include "MFCProject.h"
#include "MFCPropertyGridPropertyAux.h"


// CMFCPropertyGridPropertyAux

CMFCPropertyGridPropertyAux::CMFCPropertyGridPropertyAux(const CString& strGroupName, DWORD_PTR dwData,BOOL bIsValueList):CMFCPropertyGridProperty(strGroupName, dwData, bIsValueList)
{
}

CMFCPropertyGridPropertyAux::CMFCPropertyGridPropertyAux(const CString& strName, const COleVariant& varValue, LPCTSTR lpszDescr, DWORD_PTR dwData,
LPCTSTR lpszEditMask, LPCTSTR lpszEditTemplate, LPCTSTR lpszValidChars):CMFCPropertyGridProperty(strName, varValue, lpszDescr, dwData, lpszEditMask, lpszEditTemplate, lpszValidChars)
{
}


CMFCPropertyGridPropertyAux::~CMFCPropertyGridPropertyAux()
{
}


BOOL CMFCPropertyGridPropertyAux::OnUpdateValue() //virtual method implementation
{
AfxMessageBox(L"Value Changed");
//do other stuff
return true;
}

我能够检测到一个属性实际上何时被更改,但是有一些错误(比如在 MessageBox 出现后删除整个更新的信息),这可能与 CMFCPropertyGridProperty 中的其他方法和属性有关在这个辅助类中仍然没有实现。我想知道:在我的辅助类中实现 CMFCPropertyGridProperty 类中包含的所有内容将是一项艰巨的工作(就像我对构造函数所做的那样)。是否应该有一个关于 OOP 的策略来解决问题?另外,我不知道我的方法是否最好。我的意思是,有没有更简单的方法来实现 BOOL CMFCPropertyGridProperty::OnUpdateValue() 而无需重写另一个类的代码?欢迎任何想法!

最佳答案

MFC 已经实现了这样的“消息”。您不需要自己做这些事情。

有一个已注册的 Windows 消息 AFX_WM_PROPERTY_CHANGED 会在属性发生更改时发送。它被发送给网格的所有者。

请参阅 MSDN 中的文档.

还有一个虚函数 CMFCPropertyGridCtrl::OnPropertyChanged 会在属性更改时调用。

即使您希望调用您的内部 OnUpdateValue 值。这很容易。实现您自己的 CMFCPropertyGridCtrl::OnPropertyChanged。使用 DYNAMIC_DOWNCAST 获取指向您的 Aux 类的指针,然后调用 OnUpdateValue...没什么大不了的。

关于c++ - 重新实现 CMFCPropertyGridProperty 类 (MFC) 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20504836/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com