4

WinAPI C++ による図形の描画を勉強しています。WM_PAINT でいくつかのコードを使用して 2 つの楕円を描画しようとしました。

PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
HPEN hPen = CreatePen(PS_DASHDOTDOT, 2, NULL);SelectObject(hdc, hPen);
Ellipse(hdc, 100, 200, 400, 400);
Ellipse(hdc, 300, 300, 500, 510);   

DeleteObject(hPen);
EndPaint(hWnd, &ps);

しかし、出力は次のとおりです。

ここに画像の説明を入力 私が期待する結果は、どちらの形状も他の形状よりも前にあるということではありません。そしてボーダーはダッシュドットドットです。誰かが私の間違いを見せてもらえますか? ご協力ありがとうございます。

4

2 に答える 2

4

Ellipse()(すべての GDI 形状関数と同様) は、現在のブラシを使用して形状を塗りつぶします。これが、出力がそのように見える理由です。詳細については、ペンとブラシの色の設定を参照してください。

塗りつぶしのない楕円だけが必要な場合は、最初にヌル ブラシを選択します。

SelectObject( hdc, GetStockObject( NULL_BRUSH ) );

于 2013-04-03T17:48:19.040 に答える
3

アウトラインを描画するだけでなく、塗りつぶすこともできるため、一方が他方の上に表示されます。塗りつぶしをやめるには、「ヌル ブラシ」と呼ばれることもある「中空ブラシ」を選択します。

HBRUSH hbrOld = SelectObject(hdc, GetStockObject(HOLLOW_BRUSH));
// draw your ellipses here

幅が 1 または 0 の点線または破線のペンのみを作成できます。2 を使用したため、コマンドは失敗しました。

また、ペンを削除する前に、DC からペンを選択する必要があります。

于 2013-04-03T17:50:36.253 に答える