gpt4 book ai didi

c++ - 如何清除ActiveX OCX控件的绘图区?

转载 作者:行者123 更新时间:2023-11-28 03:33:29 25 4
gpt4 key购买 nike

我在绘制 ActiveX 控件时遇到了一些问题。在下面的屏幕截图中,您可以看到在 VB6 IDE 中调整大小后的控件。调整大小之前的控件轮廓仍显示在控件的左侧:

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);
}

如何清除绘图区域?

最佳答案

我设法在 vb 表单编辑器中重现了这一点。看起来问题来了,因为您没有在椭圆外绘制任何东西。因此,您可以像这样在整个区域中绘制一个矩形,然后再在 OnDraw() 中绘制任何内容。

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

我对此进行了测试并且工作正常。

关于c++ - 如何清除ActiveX OCX控件的绘图区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11867929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com