【问题标题】:how to clone a solidbrush in GDI+ C++如何在 GDI+ C++ 中克隆一个solidbrush
【发布时间】:2009-05-08 04:28:10
【问题描述】:

我正在使用 gdi+ 和 c++。 我有一个关于 SolidBrush 的问题。 如何克隆 SolidBrush?

SolidBrush* oldBrush xxx;
Brush* newBrush = oldBrush->Clone();

我发现 newBrush 是一个画笔对象。 这意味着如果我使用dynamic_cast<SolidBrush>(newBursh),我将永远得到 NULL。

我看了gdi+ SolidBrush 的.h 文件,好像使用了Brush 的虚拟克隆方法,它没有覆盖它!

为什么?

感谢您的解决方案,但我还有问题吗?为什么 SolidBrush 不实现 Clone Method?

【问题讨论】:

    标签: c++ gdi+ clone


    【解决方案1】:

    Brush 可以做任何事情SolidBrush 可以。 SolidBrush 只是一种创建纯色Brush 的便捷方式。

    这是一个源自this example at MSDN的示例:

    SolidBrush solidBrush(Color(255,255,0,0));
    Brush *clone = solidBrush.Clone();
    

    然后您可以继续使用clone,就像使用任何其他画笔一样,它的行为与solidBrush 完全相同。

    【讨论】:

      【解决方案2】:

      为什么 SolidBrush 不实现克隆方法?

      SolidBrush 继承了 Brush 的 clone 方法。在SolidBrush 中再次实现它是多余的。

      【讨论】:

      • 其实我认为 clone 方法应该调用它自己的构造,所以它必须被覆盖。不然怎么创建自己类型的对象呢?
      • SolidBrush 类创建与Brush 类完全相同类型的 GDI+ 对象。这些类只是 C API 上的 C++ 包装器,Brush::Clone 只是调用::GdipCloneBrush,并将结果包装在一个新的Brush 对象中(不是SolidBrush 对象)。代码就在GdiPlusBrush.h,你应该看看。
      【解决方案3】:

      您可以简单地使用 SolidBrush 的颜色属性,它将被克隆。它是一个 SolidBrush,因此,无论如何,唯一重要的是颜色。

      这样的事情应该可以工作:

      Brush* newBrush = new Brush(oldBrush->Color);

      【讨论】:

      • 笔刷是虚拟的,无法实例化
      猜你喜欢
      • 2011-11-15
      • 2013-03-28
      • 2023-03-30
      • 1970-01-01
      • 2017-09-18
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多