2012-08-08 73 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()))); 

我测试了这个,工作正常。