MFC中画图重影、覆盖的问题

这个问题纠结了好几天,今天终于搞定了

事件起因是修改老代码,但是发现改完以后的画矩形函数中一直会画第二个图形时,第一个图形就会消失,循环往复。原来的代码如图:


void CImageView::MouseMoveRegion(CPoint ptInImage, UINT uFlags, COLORREF cr)
{
    ···
	CDC *pDC = GetDC();
	m_ptTo = ptInImage;
	int nOldR2 = pDC->SetROP2(R2_XORPEN);
 	DrawNodeBorder(pDC, m_rcTemp, m_fScale, cr);
 	m_rcTemp=CRect(m_ptStart, ptInImage);
 	m_rcTemp.NormalizeRect();
	m_rcTemp.OffsetRect(-GetScrollPosition().x / m_fScale, -GetScrollPosition().y / m_fScale);
	DrawNodeBorder(pDC, m_rcTemp, m_fScale, cr);
 	pDC->SetROP2(nOldR2);
	ReleaseDC(pDC);
}

经过艰苦卓绝的调试和测试,终于把错误定位到这个函数中,最后发现是这个函数中第一次画的矩形跟第二次画的不同,导致上述的问题。修改后代码如下:

void CImageView::MouseMoveRegion(CPoint ptInImage, UINT uFlags, COLORREF cr)
{
	CDC *pDC = GetDC();
	int nOldR2 = pDC->SetROP2(R2_XORPEN);
	m_rcTemp = CRect(m_ptStart, m_ptTo);		
	m_rcTemp.NormalizeRect();
	m_rcTemp.OffsetRect(-GetScrollPosition().x / m_fScale, -GetScrollPosition().y / m_fScale);
 	DrawNodeBorder(pDC, m_rcTemp, m_fScale, cr);
 	m_rcTemp=CRect(m_ptStart, ptInImage);
 	m_rcTemp.NormalizeRect();
	m_rcTemp.OffsetRect(-GetScrollPosition().x / m_fScale, -GetScrollPosition().y / m_fScale);
	DrawNodeBorder(pDC, m_rcTemp, m_fScale, cr);
	m_ptTo = ptInImage;
 	pDC->SetROP2(nOldR2);
	ReleaseDC(pDC);
}

成功实现效果。

以上。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值