2012-08-08 60 views
0

我在繪製ActiveX控件時遇到了一些麻煩。在下面的屏幕截圖中,您將看到VB6 IDE中調整大小後的控件。控制的從大小調整前的輪廓仍然顯示在控制左側:如何清除ActiveX OCX控件的繪圖區域?

enter image description here

這裏是繪製一個黑色的省略號帶有紅色的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); 
} 

如何清除繪圖區域?

+0

我無法在MSVC2010對話框編輯器中重現此操作。我用上面的代碼插入了一個示例activex。無論如何,你是否已經在表單中插入了兩個activex控件副本? – PermanentGuest 2012-08-08 15:37:29

+0

只有一個。它可能是VB6 IDE的一個特點,它並不總是清除調整大小的背景,但是,我非常有興趣知道如何清除代碼背景。 – 2012-08-08 15:40:47

回答

2

我設法在vb表單編輯器中重現這一點。看起來問題來了,因爲你沒有在橢圓外畫任何東西。所以,你可以在繪製OnDraw()中的任何東西之前在整個區域繪製一個矩形。

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

我測試了這個,工作正常。