首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

求鼠标腾挪绘图方法,并让图形在画面刷新的时候不会消失

2013-03-17 
求鼠标移动绘图方法,并让图形在画面刷新的时候不会消失本帖最后由 buhnbuhn1000 于 2013-03-05 00:06:10

求鼠标移动绘图方法,并让图形在画面刷新的时候不会消失
本帖最后由 buhnbuhn1000 于 2013-03-05 00:06:10 编辑 void CDraw_dlgDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);
Graphics  graphics(dc.m_hDC);
graphics.SetSmoothingMode(SmoothingModeAntiAlias);//抗锯齿

CRect rect;
GetClientRect(&rect);
CPen pen(PS_SOLID,3,RGB(0,255,0));
pOldPen = dc.SelectObject(&pen);

if (m_btIsLbtDown==TRUE)
{
//GDI 鼠标移动绘图没有明显的间断,但是周边有毛刺(由于没有抗锯齿功能,于是换到GDI+)
// dc.SelectObject(&pen);
// dc.MoveTo(m_ptOrigin);
// dc.LineTo(point);
/*GDI+  鼠标移动绘图没有明显的间断,但是周边可以抗锯齿(SetSmoothingMode),DGI没有这个功能
当画笔宽度为1时,正常; 当画笔变大时,DrawLine画图相当于用一根“线段”来画图,画出来的线的周边出现缺口*/
graphics.DrawLine(&Pen(Color(200,255,255,255),9),m_ptOrigin.x,m_ptOrigin.y,point.x,point.y);
m_ptOrigin = point; 
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GDI+的DrawLine和GDI的MoveTo LineTo不一样,后者是把开始和结尾一刀两半,好控制,但是
GDI+的画线方法是不能够用以下的方法来画图的,因为不能把开始(moveto)和结尾(lineto)切半。
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

// .h
class CMyView : public CView
{
class CMyPoint : public CObject  
{
public:
CMyPoint(CPoint pointx) 
{
m_pointx = pointx; 
}
CPoint m_pointx;

};
 

//*********************************************************
void CMyView::OnLButtonDown(UINT nFlags, CPoint point) 
{
m_pointList.AddTail(new CMyPoint(point));
CView::OnLButtonDown(nFlags, point);
Invalidate();
}
//************************* *******************************
void CMyView::OnMouseMove(UINT nFlags, CPoint point) 
{
if(nFlags && MK_LBUTTON) 
{
m_pointList.AddTail(new CMyPoint(point));
Invalidate();
}

CView::OnMouseMove(nFlags, point);
}
//********************************************************

void CMyView::OnDraw(CDC* pDC)
{
CRect rect;
GetClientRect(&rect);
pDC->DrawEdge(rect, EDGE_ETCHED, BF_RECT);
pDC->SelectStockObject(BLACK_PEN);

BOOL first = TRUE;
POSITION pos = m_pointList.GetHeadPosition();

if(!pos)
{
pDC->TextOut(0,0,_T("Try to draw some lines !"));
return;
}
while(pos != NULL) 
{
CMyPoint* p = (CMyPoint*) m_pointList.GetNext(pos);

if(first) 

pDC->MoveTo(p->m_pointx); 
first = FALSE; 
}

pDC->LineTo(p->m_pointx); 
};








}



//********************************************************
GDI用上面的方法画图是不会消失,但改成GDI+的DrawLine(&pen,intx1,inty1,intx2,inty2)却画不出流畅的线,想实现铅笔的功能
求解。
[解决办法]
流畅的线???
[解决办法]
将点保存起来,在一个一个lineto()调用

热点排行