最近做学校的课程设计,我打算用VC做一个类似于XP的画图软件。现在在研究用鼠标拖拽画圆画方,可是现在有个问题是画完一个图后,画另外的图的时候鼠标拖拽的过程中会擦除掉先前部分的图像。后来我画在OnDraw里面鼠标拖拽还是有擦除的问题。请各路大神帮帮忙啊,谢谢了。
下面是我OnMouseMove里面的部分代码
]void CDrawPanelView::OnMouseMove(UINT nFlags, CPoint point)
{
CClientDC dc(this);
//橡皮线
if((m_pen||m_brush)&&startPT.x>0&&(nFlags&&MK_LBUTTON))
{
if(m_pen)penwidth=1;
pen.DeleteObject();
pen.CreatePen(penstyle,penwidth,color);
dc.SelectObject(&pen);
endPT=point;
dc.MoveTo(startPT);
dc.LineTo(endPT);
startPT.x=endPT.x;
startPT.y=endPT.y;
}
//画方
if(m_rect&&(nFlags&&MK_LBUTTON))
{
dc.SelectObject(&pen);
CGdiObject *old=dc.SelectStockObject(HOLLOW_BRUSH);
int mode=dc.GetROP2();
dc.SetROP2(R2_NOTCOPYPEN);
dc.Rectangle(endPT.x,endPT.y,startPT.x,startPT.y);
dc.SetROP2(mode);
dc.Rectangle(startPT.x,startPT.y,point.x,point.y);
dc.SelectObject(old);
endPT=point;
}
CView::OnMouseMove(nFlags, point);
}
下面是我OnMouseMove里面的部分代码
]void CDrawPanelView::OnMouseMove(UINT nFlags, CPoint point)
{
CClientDC dc(this);
//橡皮线
if((m_pen||m_brush)&&startPT.x>0&&(nFlags&&MK_LBUTTON))
{
if(m_pen)penwidth=1;
pen.DeleteObject();
pen.CreatePen(penstyle,penwidth,color);
dc.SelectObject(&pen);
endPT=point;
dc.MoveTo(startPT);
dc.LineTo(endPT);
startPT.x=endPT.x;
startPT.y=endPT.y;
}
//画方
if(m_rect&&(nFlags&&MK_LBUTTON))
{
dc.SelectObject(&pen);
CGdiObject *old=dc.SelectStockObject(HOLLOW_BRUSH);
int mode=dc.GetROP2();
dc.SetROP2(R2_NOTCOPYPEN);
dc.Rectangle(endPT.x,endPT.y,startPT.x,startPT.y);
dc.SetROP2(mode);
dc.Rectangle(startPT.x,startPT.y,point.x,point.y);
dc.SelectObject(old);
endPT=point;
}
CView::OnMouseMove(nFlags, point);
}
解决方案 »
- 如何在List control控件中进行排序???
- 为什么我的存取过程在pb里直接运行是可以的,可用vc做个程序运行时却只运行到一半就出错,谁能告诉我这二个的区别?
- 用cbitmap类定义的图形是不是不能够打印阿
- unresolved external symbol __endthreadex怎么解决?
- 请教一个有关UNICODE字符显示的问题。
- 几个问题。
- 没有分数也有人帮我这个菜鸟吗???
- 对一个button 按着不放如何处理? 弹起后又该响应什么消息?
- 用VC往数据库中插入一条记录后,如何快速得到此记录的ID??
- 各位大虾,请问用win32API怎样实现把鼠标限制在自己的窗口内,让鼠标不超出边界框???
- 求高手出招: WebBrowser控件,DNS解析失败后,怎样获取跳转的URL?
- strcpy_s等字符串安全函数抛出的异常如果拦截
在描画结束后,重新描画集合中的所有元素。