我想用WINDOWS API做一个画直线的画图板要求是鼠标按下 开始画
按着的时候 线会跟着动
放开线出来现在遇到的问题是出来线后 如果一动窗口 所画线会消失
还有按下 松开鼠标左键也会出现问题 如果边移动边送 线也会画不出还有我在MOUSE_MOVE里用Invalidate系统消耗很大 有没更好的办法大致代码如下:
isDrawing Bool量表示按下没
case WM_PAINT:
hdc = BeginPaint(hWnd,&ps);
GetClientRect(hWnd, &rc);
if(isDraw){
switch(drawState){
case DRAW_LINE:
MoveToEx(hdc,startPoint.x,startPoint.y,NULL);
LineTo(hdc,endPoint.x,endPoint.y);
break;
}
}
EndPaint(hWnd, &ps);
break; case WM_LBUTTONDOWN:
isDraw = true; //start to draw
GetCursorPos(&startPoint);
ScreenToClient(hWnd,&startPoint); //get 鼠标位置
endPoint = startPoint;
InvalidateRect(hWnd,NULL,FALSE);
break; case WM_LBUTTONUP:
GetCursorPos(&endPoint);
ScreenToClient(hWnd,&endPoint);
isDraw = false;
break; case WM_MOUSEMOVE:
if(isDraw){
switch(drawState)
{
case DRAW_LINE:
GetCursorPos(&endPoint);
ScreenToClient(hWnd,&endPoint);
MoveToEx(hdc,startPoint.x,startPoint.y,NULL);
InvalidateRect(hWnd,NULL,TRUE);
break;
}
}
break;
按着的时候 线会跟着动
放开线出来现在遇到的问题是出来线后 如果一动窗口 所画线会消失
还有按下 松开鼠标左键也会出现问题 如果边移动边送 线也会画不出还有我在MOUSE_MOVE里用Invalidate系统消耗很大 有没更好的办法大致代码如下:
isDrawing Bool量表示按下没
case WM_PAINT:
hdc = BeginPaint(hWnd,&ps);
GetClientRect(hWnd, &rc);
if(isDraw){
switch(drawState){
case DRAW_LINE:
MoveToEx(hdc,startPoint.x,startPoint.y,NULL);
LineTo(hdc,endPoint.x,endPoint.y);
break;
}
}
EndPaint(hWnd, &ps);
break; case WM_LBUTTONDOWN:
isDraw = true; //start to draw
GetCursorPos(&startPoint);
ScreenToClient(hWnd,&startPoint); //get 鼠标位置
endPoint = startPoint;
InvalidateRect(hWnd,NULL,FALSE);
break; case WM_LBUTTONUP:
GetCursorPos(&endPoint);
ScreenToClient(hWnd,&endPoint);
isDraw = false;
break; case WM_MOUSEMOVE:
if(isDraw){
switch(drawState)
{
case DRAW_LINE:
GetCursorPos(&endPoint);
ScreenToClient(hWnd,&endPoint);
MoveToEx(hdc,startPoint.x,startPoint.y,NULL);
InvalidateRect(hWnd,NULL,TRUE);
break;
}
}
break;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货