1

私は境界線に間隔を置いて角丸長方形を描画しようとしていますが、Canvas.RoundRect 関数を使用してこれを行う方法を見つけることができないようです。自分でエッジを描画する数学が得意ではありません。描画できますCanvas.MoveTo および Canvas.LineTo 関数を使用して間隔のある四角形ですが、エッジを丸くする方法がわかりません。現在私がやっていることは、境界線の間隔を空けたい場所に黄色の長方形を作成することですが、問題は印刷時にプリンターキャンバスに直接描画する必要があり、透明シートに描画する必要があるためです。背景色は問題を引き起こします。カスタム描画ルーチンの作成を手伝ってくれる人、またはその領域を消去して背景色なしで透明な紙に印刷する方法を教えてくれる人. 黄色の背景色はプレビュー用です。

境界線の間隔の意味を知るには、画像を参照してください。

ここに画像の説明を入力

ありがとう

4

2 に答える 2

7

現在のデバイスコンテキストのクリッピング領域を操作することにより、ギャップを除外できます。L、R、T、およびBがギャップを作成するための黄色の長方形の座標であると仮定して、次のコードを使用します。

ExcludeClipRect(Canvas.Handle, L, T, R, B); // exclude the gap
Canvas.RoundRect(<whatever you already do here>);
SelectClipRgn(Canvas.Handle, 0); // reset the clipping region
于 2012-10-03T14:41:46.983 に答える
4

部分的に丸みを帯びた長方形を自分で描くことができます。ストレート部分にとを使用MoveToし、コーナーに使用します。LineToArc

このArc関数は、楕円の一部を描画します。関数の最初の2組の座標は、楕円の境界を示します。長方形の角を円形にしたい場合、楕円は円であり、X2 - X1に等しくなりY2 - Y1ます。座標の次の2つのペアは、円の開始点と終了点を示します。それらは、まっすぐな部分に渡すのと同じポイントになりますMoveToLineTo円弧は反時計回りに描画されます。

于 2012-10-03T12:17:30.133 に答える