gpt4 book ai didi

c++ - 在MFC中重绘形状

转载 作者:行者123 更新时间:2023-12-02 10:14:41 26 4
gpt4 key购买 nike

我正在尝试使用MFC和C++开发画家应用程序。

因此,我设置了一个 View 来进行实际绘画。但是,当我打开颜色按钮时,在 Canvas View 上显示菜单的“剩余”。.我不知道如何删除它们。.我尝试使用SaveDCRestoreDC将其还原到以前的状态,但是没有运气。据我了解,它意在恢复设备上下文的属性,例如笔和画笔,但对我来说毫无用处...

我还需要此功能,因此当我放置一个矩形时,我可以为其提供预览,但是“previews”仍然像剩菜一样显示。

我 View 的OnEraseBkgbd;

BOOL CanvasView::OnEraseBkgnd(CDC* pDC)
{
if (!isBackgroundInit)
{
CRect rect;
GetClientRect(&rect);
CBrush myBrush(RGB(255, 255, 255)); // dialog background color
CBrush* pOld = pDC->SelectObject(&myBrush);
BOOL bRes = pDC->PatBlt(0, 0, rect.Width(), rect.Height(), PATCOPY);
pDC->SelectObject(pOld); // restore old brush
isBackgroundInit = true;
return bRes;
}

return 0;
}

我的OnPaint:
void CanvasView::OnPaint()
{
CDialogEx::OnPaint();
//UpdateData(true);
CRect rect;
GetClientRect(&rect);
if (dc == nullptr)
{
dc = new CClientDC(this);
//dc->CreateCompatibleDC(dc);
HDC hdc = CreateCompatibleDC(*dc);
this->hdc = &hdc;
} else
{

BitBlt(*dc, 0, 0, (int)rect.Width(), (int)rect.Height(), *hdc, 0, 0, SRCCOPY);
}
}

首先是怎么看的:

enter image description here

打开颜色按钮时的外观:

enter image description here

关闭颜色按钮菜单后的外观(用红色箭头标记的剩余部分):

enter image description here

尝试放置矩形时:

enter image description here

知道如何解决此问题并真正还原图形吗?

最佳答案

我不确定我了解您要做什么。CView具有一个称为OnDraw的虚拟方法。这是您必须重写的方法:

void CMyView::OnDraw(CDC* pDC)
{
CMyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

// first erase the entire client rectangle
CRect cr;
GetClientRect( &cr );
pDC->FillSolidRect( cr, RGB( 255, 255, 255 ) );

// your actual drawing goes here
pDC->Rectangle( 0, 0, 100, 100 );
}

您还必须编写 OnEraseBkgnd:
BOOL CMyView::OnEraseBkgnd( CDC* /*pDC*/ )
{
return TRUE; // we fill the client rectangle in OnDraw
}

另外,您似乎正在尝试实现临时内存DC。已经有一个: CMemDC

关于c++ - 在MFC中重绘形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62361251/

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