0

ActiveXコントロールの描画に問題があります。以下のスクリーンショットでは、VB6IDEでサイズ変更した後のコントロールが表示されています。サイズ変更前のコントロールのアウトラインは、コントロールの左側に引き続き表示されます。

ここに画像の説明を入力してください

これは、赤いZで黒い省略記号を描画するコードです。

void CzFileIoXCtrl::OnDraw(CDC* pdc, 
                           const CRect& rcBounds, 
                           const CRect& rcInvalid)
{
    if (!pdc)
    {
        return;
    }

    pdc->SetBkMode(TRANSPARENT); 
    pdc->SelectObject(CBrush::FromHandle((HBRUSH)GetStockObject(BLACK_BRUSH)));
    pdc->Ellipse(rcBounds.left, rcBounds.top, 
                 rcBounds.left + rcBounds.Width(), 
                 rcBounds.top + rcBounds.Height());       

    HFONT font = CreateFont(int(rcBounds.Height() * 0.7),
                            int(rcBounds.Width()  * 0.5),
                            0, 0, FW_BLACK, FALSE, FALSE, FALSE,
                            ANSI_CHARSET,
                            OUT_DEFAULT_PRECIS,
                            CLIP_DEFAULT_PRECIS,
                            CLEARTYPE_QUALITY,
                            FF_DECORATIVE, NULL);
    pdc->SelectObject(font);
    pdc->SetTextColor(RGB(255, 0, 0));
    DRAWTEXTPARAMS params = { sizeof(DRAWTEXTPARAMS), 1, 0, 0, 1 };
    RECT bounds = rcBounds;
    CString z(L"Z");
    pdc->DrawTextEx(z, &bounds, DT_CENTER | DT_VCENTER | DT_SINGLELINE, &params);
}

描画領域をクリアするにはどうすればよいですか?

4

1 に答える 1

2

私はこれをvbフォームエディタで再現することができました。楕円の外側に何も描画しないため、問題が発生しているようです。したがって、OnDraw()で何かを描画する前に、このように領域全体に長方形を描画できます。

pdc->FillRect( rcBounds, &CBrush(TranslateColor( AmbientBackColor() )) );

私はこれをテストし、正常に動作しています。

于 2012-08-08T16:28:37.607 に答える