如何知道哪种类型的刷子是ID2D1Brush

How to know which type of brush is ID2D1Brush?

本文关键字:ID2D1Brush 类型 何知道 种类      更新时间:2023-10-16

我有一个ID2D1Brush之前使用CreateSolidColorBrush或createlineeargradientbrush创建。

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

ID2D1Brush* brush = ...
if (brush is ID2D1SolidColorBrush)
{
}
else if (brush is ID2D1LinearGradientBrush)
{
}

只有当你选择在每个渲染通道上这样做时,查询才会受到影响,并且可能正是你需要的。

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

我使用这种策略,当一个基类将保存一个给定的资源(如背景刷),并允许用户(或开发人员)将其设置为他们的偏好。在这种情况下(使用线性梯度刷),夹紧是必要的。好运。

C++你跟踪自己的东西。这不是C#。所以有两种情况:

  • 你的资源是静态的,你知道每件事是什么,所以你不会在运行时查询。
  • ID2D1SolidColorBrush周围使用包装器类,其中存储有关画笔的进一步信息。使用enum的笔刷类型对你的应用程序有意义。

查询与跟踪自己的性能相比是一个糟糕的选择。