A
allenzen
Unregistered / Unconfirmed
GUEST, unregistred user!
调用Line、Pie、Polygon...系统是如何刷新的?
============================================
最近研究快速作图问题。
一般情况使用TCANVAS提供的函数作图,我在看TCANVAS的源码的时候,有个问题想请教一下
如:
procedure TCanvas.Polygon(const Points: array of TPoint);
begin
Changing;
RequiredState([csHandleValid, csPenValid, csBrushValid]);
Windows.Polygon(FHandle, PPoints(@Points)^, High(Points) + 1);
Changed;
end;
这是画闭合折线的函数,调用完成后,屏幕上就自动显示出来了。但是它是如何刷屏的?
起初怀疑是控件接管了TCanvas的OnChanging 和 Onchange事件,但是我跟踪了Form还其它的控件的
源码,都没有发现他们接管了这两个事件,后来又怀疑是不是调用Polygon API函数后,系统会不会
发出消息,跟踪了WM_PAint,WM_ERASEBKGND等消息处理函数,发现也没有发出消息。这下可把难住了
请指教!
============================================
最近研究快速作图问题。
一般情况使用TCANVAS提供的函数作图,我在看TCANVAS的源码的时候,有个问题想请教一下
如:
procedure TCanvas.Polygon(const Points: array of TPoint);
begin
Changing;
RequiredState([csHandleValid, csPenValid, csBrushValid]);
Windows.Polygon(FHandle, PPoints(@Points)^, High(Points) + 1);
Changed;
end;
这是画闭合折线的函数,调用完成后,屏幕上就自动显示出来了。但是它是如何刷屏的?
起初怀疑是控件接管了TCanvas的OnChanging 和 Onchange事件,但是我跟踪了Form还其它的控件的
源码,都没有发现他们接管了这两个事件,后来又怀疑是不是调用Polygon API函数后,系统会不会
发出消息,跟踪了WM_PAint,WM_ERASEBKGND等消息处理函数,发现也没有发出消息。这下可把难住了
请指教!