5,927
社区成员




procedure TSkinEdit.DrawParentImage(Control: TControl; DC: HDC);
var
SaveIndex: Integer;
P: TPoint;
begin
if Control.Parent = nil then
Exit;
SaveIndex := SaveDC(DC);
GetViewportOrgEx(DC, P);
SetViewportOrgEx(DC, P.X - Control.Left, P.Y - Control.Top, nil);
IntersectClipRect(DC, 0, 0, Control.Parent.ClientWidth, Control.Parent.ClientHeight);
try
Control.Parent.Perform(WM_EraseBkgnd, DC, 0);
Control.Parent.Perform(WM_PrintClient, DC, prf_Client);
except
end;
RestoreDC(DC, SaveIndex);
end;
通过此方法先把控件背景画到自己的DC里,然后自绘EDIT的背景,有很多三方控件支持透明的,看下它们的实现代码就知道原理了