MFC中,当鼠标点下时确定一点,然后鼠标弹起移动的话就会有一条线,连接现在鼠标的位置和之前确定的那一点,
就好象画图软件中那样,当你画一条线时,先确定一点,然后不管鼠标移动到哪里就有一条线连接鼠标当前位置和之前确定点。直到你再次按下鼠标时,就真的画一条线。
就好象画图软件中那样,当你画一条线时,先确定一点,然后不管鼠标移动到哪里就有一条线连接鼠标当前位置和之前确定点。直到你再次按下鼠标时,就真的画一条线。
调试欢乐多
void CTView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default m_StartPoint=point; m_LastEndPoint=point; SetCapture(); CView::OnLButtonDown(nFlags, point);} void CTView::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default if(GetCapture()==this) { CClientDC dc(this); ReleaseCapture(); dc.MoveTo(m_StartPoint); dc.LineTo(point); } CView::OnLButtonUp(nFlags, point);} void CTView::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default if(nFlags && MK_LBUTTON) { CClientDC dc(this); int nDrawMode=dc.GetROP2(); dc.SetROP2(R2_NOTXORPEN); dc.MoveTo(m_StartPoint); dc.LineTo(m_LastEndPoint); dc.MoveTo(m_StartPoint); dc.LineTo(point); m_LastEndPoint=point; dc.SetROP2(nDrawMode); } CView::OnMouseMove(nFlags, point);}
if(temp == FALSE)
{
mPointOrigin=point;//the first point left_top
temp == Ture;
}
else
{
CPen *pOldPen;
CPen LinePen(PS_DOT,1,RGB(255,0,0));
pOldPen = ClientDC.SelectObject(&LinePen);
ClientDC.SelectStockObject(HOLLOW_BRUSH);
ClientDC.SetROP2(R2_NOT);
ClientDC.MoveTo(mPointOrigin.x,mPointOrigin.y);
ClientDC.LineTo(point.x, point.y);
ClientDC.SetROP2(R2_COPYPEN);
ClientDC.MoveTo(mPointOrigin.x,mPointOrigin.y);
ClientDC.LineTo(point.x,point.y);
}
OnMouseMove() ClientDC.SetROP2(R2_NOT);
CPen *pOldPen;
CPen LinePen(PS_DASH,1,RGB(255,0,0));
pOldPen = ClientDC.SelectObject(&LinePen);
ClientDC.SetBkMode(TRANSPARENT);
ClientDC.SelectStockObject(NULL_BRUSH);
ClientDC.SetROP2(R2_NOT);
ClientDC.MoveTo(mPointOrigin.x,mPointOrigin.y);
ClientDC.LineTo(mPointOld.x, mPointOld.y);
ClientDC.MoveTo(mPointOrigin.x,mPointOrigin.y);
ClientDC.LineTo(point.x,point.y);
CClientDC pDC(this);
OnPrepareDC(&pDC);
pDC.DPtoLP(&point);
pDC.SetROP2(R2_NOT); //设置异或
xx=point.x ;
yy=point.y ; //这两行对你应该没用,是显示坐标用的
sprintf(p1,"%4d",xx);
m_wndStatusBar.SetPaneText(2,p1,TRUE);
sprintf(p1,"%4d",yy);
m_wndStatusBar.SetPaneText(3,p1,TRUE);
if(MenuID==1&&PressNum==1) //条件
{
if(mPointOld!=point)
{
pDC.MoveTo(mPointOrigin);pDC.LineTo(mPointOld);//擦旧线
pDC.MoveTo(mPointOrigin);pDC.LineTo(point); //画新线
mPointOld=point;
}
}