怎么用SetROP2(R2_NOTXORPEN)擦除不了先前画的矩形??

zhangxinkuku 2010-12-17 11:48:41
在MFC 鼠标移动事件响应如下:
void CMoveWindowTestDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (m_isCapture==TRUE)
{
m_hasPicture=TRUE;
CClientDC dc(this);
CPen pen(PS_SOLID,1,RGB(255,0,0));
DeleteObject(dc.SelectObject(pen));

int drawMode=dc.SetROP2(R2_NOTXORPEN);
m_endPoint.x=point.x;
m_endPoint.y=point.y;

dc.MoveTo(m_startPoint);
dc.LineTo(m_endPoint.x,m_startPoint.y);
dc.LineTo(m_endPoint.x,m_endPoint.y);
dc.LineTo(m_startPoint.x,m_endPoint.y);
dc.LineTo(m_startPoint.x,m_startPoint.y);
/*dc.LineTo(point);*/
//dc.SetROP2(drawMode);
}
CDialog::OnMouseMove(nFlags, point);
}

怎么执行后没擦除先前画的矩形 望高手解释下
...全文
833 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2010-12-17
  • 打赏
  • 举报
回复
是不是SetROP2(dc,R2_XORPEN);
stoones 2010-12-17
  • 打赏
  • 举报
回复
3楼正解,用SetROP2消除画图轨迹,要画两次,你为什么用那么复杂的方法画矩形啊,直接用Rectangle就行了。
无边1 2010-12-17
  • 打赏
  • 举报
回复
if (m_isCapture==TRUE)
{
m_hasPicture=TRUE;
CClientDC dc(this);
CPen pen(PS_SOLID,1,RGB(255,0,0));
DeleteObject(dc.SelectObject(pen));
int drawMode=dc.SetROP2(R2_NOTXORPEN);

dc.Rectangle( startPoint.x, startPoint.y, m_endPoint.x, m_endPoint.y );
dc.Rectangle( startPoint.x, startPoint.y, point.x, point.y );

m_endPoint.x=point.x;
m_endPoint.y=point.y;
//dc.SetROP2(drawMode);
}
无边1 2010-12-17
  • 打赏
  • 举报
回复
只画了一次,要画两次,画矩形用rectangle方便点

dc.Rectangle( startPoint.x, startPoint.y, m_endPoint.x, m_endPoint.y );
dc.Rectangle( startPoint.x, startPoint.y, point.x, point.y );

m_endPoint.x=point.x;
m_endPoint.y=point.y;
wltg2001 2010-12-17
  • 打赏
  • 举报
回复
直接调用Invalidate不就行了。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧