作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用MFC和C++开发画家应用程序。
因此,我设置了一个 View 来进行实际绘画。但是,当我打开颜色按钮时,在 Canvas View 上显示菜单的“剩余”。.我不知道如何删除它们。.我尝试使用SaveDC
和RestoreDC
将其还原到以前的状态,但是没有运气。据我了解,它意在恢复设备上下文的属性,例如笔和画笔,但对我来说毫无用处...
我还需要此功能,因此当我放置一个矩形时,我可以为其提供预览,但是“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;
}
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);
}
}
最佳答案
我不确定我了解您要做什么。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
}
CMemDC
。
关于c++ - 在MFC中重绘形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62361251/
我是一名优秀的程序员,十分优秀!