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;
}
里面的不规范和不合理也请提出来好吧,谢谢。
展开
 我来答
kingboy5555
2012-10-27 · TA获得超过224个赞
知道答主
回答量:163
采纳率:0%
帮助的人:145万
展开全部
在同一地方异或一次,就擦除了原先画的线,
追问
请问线段如何异或?
追答
SetROP2(hDC, R2_XORPEN);
相思丶猫2C
2012-10-27 · TA获得超过1198个赞
知道小有建树答主
回答量:1432
采纳率:50%
帮助的人:953万
展开全部
1,WM_ERASEBKGND消息没有响应(这个消息的作用是阻止擦除背景)
2,采用双缓存(百度)
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式