我以前使用CreateSolidColorBrush或CreateLinearGradientBrush创建了一个CreateSolidColorBrush。
我需要知道我的指针是ID2D1SolidColorBrush还是ID2D1LinearGradientBrush。我该怎么做?
ID2D1Brush* brush = ...
if (brush is ID2D1SolidColorBrush)
{
}
else if (brush is ID2D1LinearGradientBrush)
{
}发布于 2015-06-03 20:43:43
只有当您选择在每次呈现传递时执行此操作,查询才会受到影响,并且可能正是您所需要的。
ID2D1Brush* brush = nullptr;
// ...
ID2D1LinearGradientBrush *linearGradientBrush = nullptr;
if (S_OK == brush->QueryInterface(__uuidof(ID2D1LinearGradientBrush), (void**)&linearGradientBrush))
{
// ...
}我使用这种策略,基类将保存给定的资源(例如背景刷),并允许用户(或开发人员)将其设置为他们的首选。在这种情况下(用线性梯度刷,夹紧是必要的。)祝好运。
发布于 2015-05-25 16:36:07
在C++中,你自己跟踪东西。这不是C#。因此有两种情况:
ID2D1SolidColorBrush周围使用一个包装类来存储有关画笔的更多信息。使用对应用程序有意义的画笔类型的enum。就性能而言,查询是一个糟糕的选择,而不是跟踪自己。
https://stackoverflow.com/questions/30441256
复制相似问题