2

我正在使用 Direct2D 绘制自定义图表。该图表在图表一侧绘制了 x 轴和 y 轴标签。当我垂直缩放图表时,一些数据将绘制在 x 轴标签的顶部,我希望始终保持轴标签的清洁。将绘画区域限制为自定义矩形而不是整个控件的最佳方法是什么?

我有几个想法,但我不确定是否有更好的方法来做到这一点:

方法1)

使用 GDI 样式并在一个面板上绘制图表区域,在另一个面板上绘制轴标签。这样,当我绘制到图表面板时,我就不会弄乱轴标签。问题是我将不得不制作更多的 Direct2D 对象(至少为每个控件 (hWnd) 呈现目标),并且我不确定这样做会影响性能。

方法2)

每次更新轴标签时将其复制到位图,然后在图表面板命令之后将这些位图绘制到控件顶部。这比方法1便宜吗?

方法3)

在每次绘图操作中手动检查像素位置,并在必要时进行修改。这似乎是最糟糕的选择。

编辑:

方法4)

与方法 1) 相同,但使用 GDI+ 绘制轴标签并仅对图表使用 Direct2D。

方法5)

使用 ID2DLayer。我刚刚从MSDN 文档中找到了这个功能。这似乎是我正在寻找的东西,但它带有许多关于频繁使用的性能影响的警告。

你的意见?

4

1 回答 1

1

您可以使用轴对齐的夹子,这样不那么饿。

流行

来自 msdn 的示例:

pRT->PushAxisAlignedClip(
D2D1::RectF(20, 20, 100, 100),
D2D1_ANTIALIAS_MODE_PER_PRIMITIVE
);

pRT->FillRectangle(D2D1::RectF(0, 0, 200, 133), m_pOriginalBitmapBrush);
pRT->PopAxisAlignedClip();
于 2012-11-09T13:27:40.713 回答