请教:可视控件的显示是否借助了Canvas的力量?谢谢(30分)

  • 主题发起人 主题发起人 teleman2000
  • 开始时间 开始时间
T

teleman2000

Unregistered / Unconfirmed
GUEST, unregistred user!
例如,label控件的caption属性设置之后,就能显示出文字,这是不是使用了类似Canvas.textout()的方法?
谢谢!
 
procedure TCustomLabel.Paint;
const
Alignments: array[TAlignment] of Word = (DT_LEFT, DT_RIGHT, DT_CENTER);
WordWraps: array[Boolean] of Word = (0, DT_WORDBREAK);
var
Rect, CalcRect: TRect;
DrawStyle: Longint;
begin
with Canvas do
begin
if not Transparent then
begin
Brush.Color := Self.Color;
Brush.Style := bsSolid;
FillRect(ClientRect);
end;
Brush.Style := bsClear;
Rect := ClientRect;
{ DoDrawText takes care of BiDi alignments }
DrawStyle := DT_EXPANDTABS or WordWraps[FWordWrap] or Alignments[FAlignment];
{ Calculate vertical layout }
if FLayout <> tlTop then
begin
CalcRect := Rect;
DoDrawText(CalcRect, DrawStyle or DT_CALCRECT);
if FLayout = tlBottom then OffsetRect(Rect, 0, Height - CalcRect.Bottom)
else OffsetRect(Rect, 0, (Height - CalcRect.Bottom) div 2);
end;
DoDrawText(Rect, DrawStyle);
end;
end;

Tlabel的绘制过程。
 
使用的是API DrawText
 
paint是在哪里调用的呢?
 
paint 是WM——PAINT这个系统消息激发的。
大部分的VCL都有CANVAS属性。但是不是所以的具有外观的东西都靠它来画。CANVAS也只是封装了WINDOWS的绘图场景而已。其实现也依赖于GUI。API
 
多人接受答案了。
 
后退
顶部