VC++高手请进

来源:百度知道 编辑:UC知道 时间:2024/05/23 20:14:12
目的:计算机图形学 画三角形(用VC++)
功能实现:鼠标左键点一下,记录第一点,然后松开鼠标左键并移动鼠标,会产生一条直线,再点一下左键,确定三角形的第二点,此时已画出一条边,然后再松开鼠标左键并移动鼠标,移动到某一位置点击鼠标右键,此时确定三角形的第三点,生成三角形的第二条边,同时第三条边自动生成(第三点跟第一点自动连接起来)!下面是我的鼠标左键的消息映射代码:但出现了一个问题,就是:画完一个三角形后,如果再画第二个或其他个三角形,就会仍然已第一个三角形的初始两点为该三角形的第一二个点,即只要画一个点就能画出三角形,所以画出的三角形都是同一个底边的!这个问题该如何解决啊?我不知说清楚了没?呵呵!

//鼠标左键映射代码:
int a=0;
void CDrawLineView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_nPrev=point;//保存光标的当前位置
m_nOrigin=point;//画线的起始位置
SetCapture();//CWnd的成员函数,使随后的鼠标消息都被送往视图窗口
m_Drag=1;//标志鼠标为拖动状态
RECT rect;
GetClientRect(&rect);//CWnd的成员函数,获取窗口客户区的坐标
ClientToScreen(&rect);//CWnd的成员函数,将窗口客户区坐标转换为屏幕坐标
ClipCursor(&rect);
CView::OnLButtonDown(nFlags, point);
a++;
if(a==1)
tempp=point;
if(a==2)
temppp=point;
// TODO: Add your message handler code here and/or call default
}
//鼠标左键放开:
void CDrawLineView::OnLButtonUp(UINT nFlags, CPoint point)

在成员里加一个整形变量记数i
void CDrawLineView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
i=0;

if(m_Drag)
{
m_Drag=0;
ReleaseCapture();
ClipCursor(NULL);

}
CDrawLineDoc *pDoc=GetDocument();
pDoc->AddLine(m_nOrigin.x,m_nOrigin.y,point.x,point.y);
CView::OnLButtonUp(nFlags, point);
CDrawLineDoc* pDOC=GetDocument();
if(pDOC->CurrentDrawTool==ID_DRAW_TRIANGLE)
{
m_Drag=1;
}
}
void CDrawLineView::OnRButtonDown(UINT nFlags, CPoint point)
{
CDrawLineDoc* pDOC=GetDocument();
if(pDOC->CurrentDrawTool==ID_DRAW_TRIANGLE&&(i==0))
{
CGraph dc(this);
dc.MoveTo(tempp); dc.LineTo(point);
dc.LineTo(temppp);
m_Drag=0;
}
CView::OnRButtonDown(nFlags, point);
i++;

}

在左键按下并弹起的时候在保存一个点,然后当再次出现鼠标消息的时候保存第二个点, 并把这两个点保存到对象的成员变量中, 当再次出现鼠标消息的时候