这个问题纠结了好几天,今天终于搞定了
事件起因是修改老代码,但是发现改完以后的画矩形函数中一直会画第二个图形时,第一个图形就会消失,循环往复。原来的代码如图:
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);
}
成功实现效果。
以上。