TPageControl 的父类是 TCustomTabControl,TCustomTabControl 的父类就是 TWinControl 了(到顶了)。
所以在 TCustomTabControl 里看不到具体绘制控件的代码我就绝望了。[
]
看看下面 TCustomTabControl 仅有的一点点与控件绘制相关的代码吧:
procedure TCustomTabControl.CNDrawItem(var Message: TWMDrawItem);
var
SaveIndex: Integer;
begin
with Message.DrawItemStruct^ do
begin
SaveIndex := SaveDC(hDC);
FCanvas.Lock;
try
FCanvas.Handle := hDC;
FCanvas.Font := Font;
FCanvas.Brush := Brush;
DrawTab(itemID, rcItem, itemState and ODS_SELECTED <> 0);
finally
FCanvas.Handle := 0;
FCanvas.Unlock;
RestoreDC(hDC, SaveIndex);
end;
end;
Message.Result := 1;
end;
就一句 DrawTab(itemID, rcItem, itemState and ODS_SELECTED <> 0); 就完成了 TabControl 的界面绘制?来看看 DrawTab 做了点什么:
procedure TCustomTabControl.DrawTab(TabIndex: Integer; const Rect: TRect;
Active: Boolean);
begin
if Assigned(FOnDrawTab) then
FOnDrawTab(Self, TabIndex, Rect, Active) // 这里是交给OwnerDraw=True时用户的代码去画Tab。
else
FCanvas.FillRect(Rect); // 这里仅仅在 Rect 框里用单色涂了一层而已。
end;