如何判断paintbox中的重画区?(100分)

  • 主题发起人 主题发起人 ozj
  • 开始时间 开始时间
O

ozj

Unregistered / Unconfirmed
GUEST, unregistred user!
我在TScrollBox放一Tpaintbox用鼠标来画图,当Paintbox的onpaint事件发生时,
我怎么样判断是需要更新Paintbox的全区还是某一区域,此区域如何获得?
我是用bitblt来拷贝更新paintbox的。
 
这好比undo操作,要记录是全局的还是局部的操作,局部操作当然是记录位置坐标了!
 
1、你直接画全部就可以了,在区域之外的画不上去的,只画了区域之内的
所以不会增加闪烁,而且简化了编程
2、GetUpdateRect可以得到要重画的区域
 
我先试一下GetUpdateRect效果如何,另外我如何让onpaint事件发生时,TScrollBox
控件不要先刷新?
 
但是有一点放慢了速度,所以要想速度快的话,一定要准确的知道你需要更新的区域.,我想最
简单的办法是更新可见区,然后再考虑其它的.
 
var r:Trect;
begin
GetUpdateRect(self,r,false);
edit2.text:=inttostr(r.Left)+ ' '+ inttostr(r.Top)+ ' '+inttostr(r.Right)+ ' '+inttostr(r.Bottom);
用上面的程序,无论如何,r的各坐标值为什么都为0呢?
 
你为什么是用ScrollBox了,象你这种情部不需要用啊,反而方便,要不实时拖动,用两个滚动
条也很方便啊.
 
>>用两个滚动条也很方便啊.
也就是自己响应滚动事件,让paintbox1的左上角坐标变化来移动paintbox?写起来难吗?
 
全0说明当前梅雁需要重画的,那命令你放在哪里?重画一次之后就不用重画的了
 
放在下面的程序里面:
procedure Tdrawmfrm.PaintBox1Paint(Sender: TObject);
var r:Trect;
begin
GetUpdateRect(selft.Handle,r,false);
edit2.text:=inttostr(r.Left)+ ' '+ inttostr(r.Top)+ ' '+inttostr(r.Right)+ ' '+inttostr(r.Bottom);
BitBlt(PaintBox1.Canvas.Handle,0,0,DwBmp.Width,DwBmp.Height,DwBmp.Canvas.Handle,0,0,SRCCOPY);
end;
 
GetUpdateRect如何用?
 
后退
顶部