win32中画完直线后如何将它删除
我在用win32做画图程序时,碰到一个问题,不知怎么解决:
我想画一条直线,先在起点点一下,然后用鼠标动态跟踪当前移动的点,并在当前点与起点之间画直线,如果当前点移到另一点,则前一条直线要被刷掉,重新画一条直线起点到当前点的直线,直到在终点处点击鼠标直线才能定下来。
如果仅仅画一条直线的话,那每次点变动后用InvalidateRect将窗口刷新一下,然后重画就可以了,最终可以确定一条直线。但是如果要多次画线的话,就不能这么整屏的刷新。
以下是我的程序一部分响应鼠标移动事件、单击事件和画面刷新事件的代码:
case WM_MOUSEMOVE:
if(bPressed) //bPressed初始化为0,如果是是非零,那么起始点已经确定
{
iCurrentPos.x=LOWORD(lParam);//记录下当前鼠标位置的点坐标
iCurrentPos.y=HIWORD(lParam);
SendMessage(hwnd,WM_PAINT,(WPARAM)MENU_LINE,(LPARAM)&iCurrentPos);//发送一个绘制消息
}
return 0;
case WM_LBUTTONDOWN: //鼠标单击事件
if(!bPressed)//如果bPressed=0,那么按下的那点事直线的起始点
{
bPressed=1;
line.beg.x=LOWORD(lParam);//记录下直线的起始点
line.beg.y=HIWORD(lParam);
SendMessage(hwnd,WM_PAINT,MENU_LINE,(LPARAM)&line.beg);
}
else
{
line.end.x=LOWORD(lParam);//如果bPressed非零,则第二次按下的位置就是直线的终点
line.end.y=HIWORD(lParam);
SendMessage(hwnd,WM_PAINT,MENU_LINE,(LPARAM)&line.end);//发送一个绘制消息,wParam参数为直线菜单项的ID号,用来区别绘制的是什么图形的,lParam参数为当前点
bPressed=0;
}
return 0;
case WM_PAINT:
InvalidateRect(hwnd,NULL,TRUE);//每得到一个刷新消息就把整屏刷新,将前一次的直线抹掉
hdc=BeginPaint(hwnd,&ps);
if(wParam == MENU_LINE)
{
iCurrentPos=*(POINT*)lParam;
DrawLine(hdc,line.beg,iCurrentPos);//绘制从起始点到鼠标当前位置之间的直线
}
所以我想请教一下哪位高手指点下如何实现多图形对象的绘制,又能够动态跟踪移动点
在此先谢过了