2

Direct2Dを使用してカスタムチャートを描画しています。チャートには、チャートの側面にx軸とy軸のラベルが描かれています。グラフを垂直方向にズームすると、一部のデータがx軸ラベルの上に描画され、軸ラベルを常にクリーンに保ちたいと思います。コントロール全体ではなく、ペイント領域をカスタムの長方形に制限する最良の方法は何ですか?

私の頭の中にはいくつかのアイデアがありますが、これを行うためのより良い方法があるかどうかはわかりません。

方法1)

GDIスタイルに移動し、1つのパネルにチャート領域をペイントし、別のパネルに軸ラベルをペイントします。このように、チャートパネルにペイントするときに、軸ラベルを台無しにすることはできませんでした。問題は、より多くの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 に答える