这个功能该怎么实现???
鼠标左键按下时,如果是第一次按下,则
dc.MoveTo(当前点.x,当前点.y);
如果是第二次按下时,则
dc.LineTo(当前点.x,当前点.y);
依次类推,既以当前鼠标按下时的坐标做为新起点,再次按下时作为终点划线,形成一个连续线段。请贴出代码来。
鼠标左键按下时,如果是第一次按下,则
dc.MoveTo(当前点.x,当前点.y);
如果是第二次按下时,则
dc.LineTo(当前点.x,当前点.y);
依次类推,既以当前鼠标按下时的坐标做为新起点,再次按下时作为终点划线,形成一个连续线段。请贴出代码来。
用一个全局变量(View类的成员变量)DWORD dwMownCun;来指示鼠标点击的次数,每点一次加1
并判断当他是奇数的时候就MoveTo,否则LineTo
哈哈哈,不要溢出哦:)
这就像在一些图形软件里的鼠标画线(Autocad里的sketch命令)CPoint* pp;
int num;pp = new CPoint[65535]; //init
num = 0;LBDown():
Isrecord = true; //左键MouseMove():
if(Isrecord) //开始记录
pp[num++] = point;RBDown(): //结束,画线
Isrecord = false;
pDC->Polyline(pp,num);
按下鼠标第二次时, 。(50,50) 那么画线到 LineTo(50,50),
并将当前点移动到(50,50)。
按下鼠标第三次时, 。。 (60,60) 那么再次画线 LienTo(60,60)依次画下去。
CClientDC dc(this);
dc.MoveTo(gPoint);
dc.LineTo(point);
gPoint = point;
这个gPoint是全局的。这样再加一些初始化和出错处理就差不多了吧
还是我贴出答案吧。这个问题看似很简单,但还是要亲自动手写代码,
在写代码的过程中才会发现一些不容易察觉的细节问题。这个问题
的关键是要注意第一次按下鼠标,和第二次鼠标。
class CMyView :pbulic CView
{
...
public:
CArray <CPoint,CPoint> ptArray;
DWORD Flag;
}
CMyView::CMyView()
{
Flag=0;
}void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
ptArray.Add(point);
CClientDC dc(this);
CPen *oldPen,newPen;
newPen.CreatePen(PS_DASH,3,RGB(0,0,255));
oldPen=dc.SelectObject(&newPen); if(Flag==0) //第一次按下鼠标时
{
//画起点
dc.SetPixel(ptArray[0].x,ptArray[0].y,RGB(0,0,255));
Flag++;
return;
}
if(Flag==1) // 按下鼠标第二次时
{
//单独处理第一次画线,
dc.MoveTo(ptArray[0].x,ptArray[0].y);
dc.LineTo(ptArray[1].x,ptArray[1].y);
Flag++;
return;
}
dc.MoveTo(ptArray[Flag-1].x,ptArray[Flag-1].y);
dc.LineTo(ptArray[Flag].x,ptArray[Flag].y); Flag++;
dc.SelectObject(oldPen); CView::OnLButtonDown(nFlags, point);
}