来源:www.cncfan.com | 2006-3-28 | (有3846人读过)
Microsoft的MFC大量的封装地Windows API,VCL也不例外。VCL功能的实现大部分都离不开Windows API,要么是直接调用,要么是经过简单的封装再调用。如TControl的Repaint的实现(Control单元中):
procedure TControl.Repaint;
var
DC: HDC;
begin
if (Visible or (csDesigning in ComponentState) and not (
csNoDesignVisible in ControlStyle)) and (Parent <> nil) and
Parent.HandleAllocated then
if csOpaque in ControlStyle then
begin
//直接调用user32.Dll的GetDC
DC := GetDC(Parent.Handle);
Try
//直接调用gdi32.Dll的IntersectClipRect
IntersectClipRect(DC, Left, Top, Left + Width, Top +
Height);
// Parent.PaintControls调用大量的API
Parent.PaintControls(DC, Self);
Finally
// 直接调用user32.Dll的ReleaseDC
ReleaseDC(Parent.Handle, DC);
end;
end else
begin
//以下两个经过封装调用
Invalidate;
Update;
end;
end;
可见VCL中处处都有API,我们从另外一个面来理解VCL就是:VCL就是大量封装API函数的类库,这样的结果就是使我们更容易使用API,不必关心那些烦人的API参数。
|