InvalidateRect的问题,新手求解!!
Winapi编写了一个很简单的程序,设置了一个定时器SetTimer(hWnd,1,50,NULL);又在WM_TIMER响应里面编写了一个动态划线,就是一条线沿着一个矩...
Winapi编写了一个很简单的程序,设置了一个定时器SetTimer(hWnd,1,50,NULL);
又在WM_TIMER响应里面编写了一个动态划线,就是一条线沿着一个矩形路径走,发现那些线条都重叠了,在响应里面又加了个InvalidateRect,发现闪屏很厉害,怎样解决啊?
部分源码如下:有两个全局int类型Gx,Gy
switch (message)
{
case WM_CREATE:
::SetTimer(hWnd,1,50,NULL);
break;
//case WM_PAINT:
case WM_TIMER:
static int Gtime;
char Gtext[100];
sprintf(Gtext,"Time=%d",Gtime);
Gtime++;
::TextOut(hdc,0,0,Gtext,strlen(Gtext));
//::MoveToEx(hdc,400,300,NULL);
//::LineTo(hdc,Gx,Gy);
Gline(hdc,400,300,Gx,Gy);
if( (Gx<700&&Gx>=10) && (Gy==30)) Gx++;
else if(Gx==700&&(Gy<600&&Gy>=30))Gy++;
else if( (Gx<=700&&Gx>10) && (Gy==600))Gx--;
else if(Gx==10&&(Gy<=600&&Gy>30))Gy--;
::ReleaseDC(hWnd,hdc);
//InvalidateRect(hWnd,0,1);
Rect rect(0,30,600,800);
InvalidateRect(hWnd,&rect,1);
break;
case WM_DESTROY:
::KillTimer(hWnd,1);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
bool Gline(HDC hdc,int x,int y,int x2,int y2)
{
::MoveToEx(hdc,x,y,NULL);
::LineTo(hdc,x2,y2);
return 1;
}
里面的不规范和不合理也请提出来好吧,谢谢。 展开
又在WM_TIMER响应里面编写了一个动态划线,就是一条线沿着一个矩形路径走,发现那些线条都重叠了,在响应里面又加了个InvalidateRect,发现闪屏很厉害,怎样解决啊?
部分源码如下:有两个全局int类型Gx,Gy
switch (message)
{
case WM_CREATE:
::SetTimer(hWnd,1,50,NULL);
break;
//case WM_PAINT:
case WM_TIMER:
static int Gtime;
char Gtext[100];
sprintf(Gtext,"Time=%d",Gtime);
Gtime++;
::TextOut(hdc,0,0,Gtext,strlen(Gtext));
//::MoveToEx(hdc,400,300,NULL);
//::LineTo(hdc,Gx,Gy);
Gline(hdc,400,300,Gx,Gy);
if( (Gx<700&&Gx>=10) && (Gy==30)) Gx++;
else if(Gx==700&&(Gy<600&&Gy>=30))Gy++;
else if( (Gx<=700&&Gx>10) && (Gy==600))Gx--;
else if(Gx==10&&(Gy<=600&&Gy>30))Gy--;
::ReleaseDC(hWnd,hdc);
//InvalidateRect(hWnd,0,1);
Rect rect(0,30,600,800);
InvalidateRect(hWnd,&rect,1);
break;
case WM_DESTROY:
::KillTimer(hWnd,1);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
bool Gline(HDC hdc,int x,int y,int x2,int y2)
{
::MoveToEx(hdc,x,y,NULL);
::LineTo(hdc,x2,y2);
return 1;
}
里面的不规范和不合理也请提出来好吧,谢谢。 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询