如何知道ID2D1Brush是哪种画笔?
How to know which type of brush is ID2D1Brush?
我有一个ID2D1Brush previously created by using CreateSolidColorBrush or CreateLinearGradientBrush。
我需要知道我的指针是 ID2D1SolidColorBrush
还是 ID2D1LinearGradientBrush
。我该怎么办?
ID2D1Brush* brush = ...
if (brush is ID2D1SolidColorBrush)
{
}
else if (brush is ID2D1LinearGradientBrush)
{
}
在 C++
中,您自己跟踪内容。这不是C#
。所以有两种情况:
- 你的资源是静态的,你知道每件事是什么,所以你不需要在运行时查询。
- 您在
ID2D1SolidColorBrush
周围使用包装器 class,您可以在其中存储有关画笔的更多信息。使用对您的应用有意义的 enum
笔刷类型。
与跟踪自己的性能相比,查询是一个糟糕的选择。
只有当您选择在每个渲染过程中都执行此操作时,查询才会受到影响,并且可能正是您所需要的。
ID2D1Brush* brush = nullptr;
// ...
ID2D1LinearGradientBrush *linearGradientBrush = nullptr;
if (S_OK == brush->QueryInterface(__uuidof(ID2D1LinearGradientBrush), (void**)&linearGradientBrush))
{
// ...
}
我使用这种策略,其中基础 class 将保存给定的资源(例如背景画笔)并允许用户(或开发人员)将其设置为他们的偏好。在这种情况下(使用线性渐变画笔,夹紧是必要的。祝你好运。
我有一个ID2D1Brush previously created by using CreateSolidColorBrush or CreateLinearGradientBrush。
我需要知道我的指针是 ID2D1SolidColorBrush
还是 ID2D1LinearGradientBrush
。我该怎么办?
ID2D1Brush* brush = ...
if (brush is ID2D1SolidColorBrush)
{
}
else if (brush is ID2D1LinearGradientBrush)
{
}
在 C++
中,您自己跟踪内容。这不是C#
。所以有两种情况:
- 你的资源是静态的,你知道每件事是什么,所以你不需要在运行时查询。
- 您在
ID2D1SolidColorBrush
周围使用包装器 class,您可以在其中存储有关画笔的更多信息。使用对您的应用有意义的enum
笔刷类型。
与跟踪自己的性能相比,查询是一个糟糕的选择。
只有当您选择在每个渲染过程中都执行此操作时,查询才会受到影响,并且可能正是您所需要的。
ID2D1Brush* brush = nullptr;
// ...
ID2D1LinearGradientBrush *linearGradientBrush = nullptr;
if (S_OK == brush->QueryInterface(__uuidof(ID2D1LinearGradientBrush), (void**)&linearGradientBrush))
{
// ...
}
我使用这种策略,其中基础 class 将保存给定的资源(例如背景画笔)并允许用户(或开发人员)将其设置为他们的偏好。在这种情况下(使用线性渐变画笔,夹紧是必要的。祝你好运。