0

MFC CDC クラスと LineTo および MoveTo 関数を使用して描画するときに問題があります。CDC オブジェクトは、ポインターを移動した時点から始まらず、画像の中央のように最初のピクセル ブランクを残します。画像の左側のように角を描くと、CDC オブジェクトが最も外側のピクセルを解放していることは明らかです。カスタム ブラシを読み込もうとしましたが、異なる結果は得られませんでした。

エッジの例

    memDC.FillSolidRect(client, BACKGROUND_COLOR);
    CPen penBorder(PS_ENDCAP_SQUARE | PS_SOLID, BORDER_WIDTH, BORDER_COLOR);
    //Draw the Horizontal line for the Status Bar
    CPen* oldPen = memDC.SelectObject(&penBorder);
    memDC.MoveTo(client.left + 0.5f * BORDER_WIDTH, client.top + 0.5f * BORDER_WIDTH);
    memDC.LineTo(client.Width() - 0.5f * BORDER_WIDTH, client.top + 0.5f * BORDER_WIDTH);
    CPen penRecess(PS_ENDCAP_SQUARE | PS_SOLID, BORDER_WIDTH, RECESS_COLOR);
    //Draw the recess
    memDC.SelectObject(&penRecess);
    memDC.MoveTo(client.left + 1.5f * BORDER_WIDTH, client.top + 1.5f * BORDER_WIDTH);
    memDC.LineTo(client.Width() - 0.5f * BORDER_WIDTH, client.top + 1.5f * BORDER_WIDTH);
4

1 に答える 1

1

この問題は MFC とは関係ありませんが、基になる Windows GDI 関数に固有のものです。のドキュメントにLineToは次のように書かれています:

LineTo 関数は、現在の位置から指定された点までの直線を描画します。

最後のポイントを描画する必要がある場合はLineTo、最初のポイントから 1 ピクセル離れた場所に 2 番目のポイントを描画する必要があります。

于 2013-02-05T16:47:36.573 に答える