2013-01-22 34 views
1

所以我工作在Visual Studio中使用C++/MFC的编辑风格的应用程序2008年MFC属性网格格式化湘江边

的视觉工作室风格应用程序的默认向导项目充满了有用的善良,但没有按没有解决所有问题,甚至我找到的几本MFC书籍都没有提到这个问题。

如何获得使用CMFCPropertyGridProperty的属性查看器来显示浮点值以限制显示的小数位数?现在,您似乎在浮点值上获得6个小数位(使用浮点数_variant_t构造)。有什么方法可以改变它吗?

回答

3

CMFCPropertyGridProperty有一个虚拟函数,称为FormatProperty()。该函数返回一个CString对象,该对象包含属性值的字符串表示形式。当需要显示属性值时,由框架调用它。

由于该功能是虚拟的,你可以从CMFCPropertyGridProperty派生自己的财产类和重写功能,使基类的实现将在一般情况下被调用,而你自己的格式逻辑将被应用在 相应的变体具有类型VT_R4float)或VT_R8double)。

事情是这样的:

class CMyProperty : CMFCPropertyGridProperty 
{ 
    ... 
    virtual CString FormatProperty() 
    { 
     CString str; 
     if (GetValue().vt == VT_R8) 
     { 
      str.Format(...); // Or whatever you want 
     } 
     else 
     { 
      str = CMFCPropertyGridProperty::FormatProperty(); 
     } 

     return str; 
    } 
}; 

然后,你可以通过你自己的财产类CMyProperty的实例CMFCPropertyGrid的功能AddProperty()

+0

安迪 - 谢谢你的回答,我已经得到它主要工作。你碰巧知道如何让它在施工中调用'FormatProperty'?它似乎没有设置该属性的格式,直到设置了值。解决方案可能很简单,只需创建并调用“SetValue”,但我希望更好。谢谢! – James

+0

@James:'FormatProperty()'是一个虚函数,所以你不应该试图在构造上调用它(意味着:在你的类的构造函数中)。但是,也许我误解了你真正想要的东西?你为什么希望它被建造?我认为任何时候它的价值需要被显示的时候框架都会调用它,不是吗? –

+0

我能弄明白,但它看起来像是如果你通过构造函数初始化一个'CMFCPropertyGridProperty'并且不调用'SetValue',那么这个函数永远不会被调用,并且你会得到默认的格式。可能是因为你所说的 - 它不能在构造函数中调用虚函数。 – James