如何知道哪种刷子是ID2D1Brush?

时间:2015-05-25 15:07:31

标签: c++ inheritance casting directx direct2d

我之前使用ID2D1BrushCreateSolidColorBrush创建了CreateLinearGradientBrush

我需要知道我的指针是ID2D1SolidColorBrush还是ID2D1LinearGradientBrush。我该怎么办?

ID2D1Brush* brush = ...

if (brush is ID2D1SolidColorBrush)
{
}
else if (brush is ID2D1LinearGradientBrush)
{
}

2 个答案:

答案 0 :(得分:1)

如果您选择在每个渲染过程中执行此操作,查询只会受到影响,并且可能正是您所需要的。

ID2D1Brush* brush = nullptr;
// ...

ID2D1LinearGradientBrush *linearGradientBrush = nullptr;
if (S_OK == brush->QueryInterface(__uuidof(ID2D1LinearGradientBrush), (void**)&linearGradientBrush))
{
    // ...
}

我使用此策略,其中基类将保存给定资源(例如背景画笔)并允许用户(或开发人员)将其设置为其首选项。在这种情况下(使用线性渐变刷,夹紧是必要的。祝你好运。

答案 1 :(得分:0)

C++中,您自己跟踪内容。这不是C#。所以有两种情况:

  • 您的资源是静态的,您知道每件事情都是如此,因此您不会在运行时进行查询。
  • 您在ID2D1SolidColorBrush周围使用了一个包装类,您可以在其中存储有关画笔的更多信息。使用对您的应用有意义的enum笔刷类型。

在性能方面跟踪自己是一个糟糕的选择。