Registriert seit: 16. Apr 2007
2.325 Beiträge
Turbo Delphi für Win32
|
Re: nonVCL Controls - Doublebuffered
1. Nov 2007, 20:17
Zitat von xaromz:
Hallo,
Zitat von Apollonius:
Das habe ich jetzt durch ein paar Minuten Studium der Controls.pas herausgekriegt.
...und liegst damit voll daneben.
Danke. Ich habe die Controls.pas von Turbo Delphi 2006 verwendet. dort heißt es:
Delphi-Quellcode:
procedure TWinControl.WMPaint( var Message: TWMPaint);
var
DC, MemDC: HDC;
MemBitmap, OldBitmap: HBITMAP;
PS: TPaintStruct;
if not FDoubleBuffered or ( Message.DC <> 0) then
begin
if not (csCustomPaint in ControlState) and (ControlCount = 0) then
inherited
else
PaintHandler( Message);
end
else
DC := GetDC(0);
MemBitmap := CreateCompatibleBitmap( DC, ClientRect.Right, ClientRect.Bottom);
ReleaseDC(0, DC);
MemDC := CreateCompatibleDC(0);
OldBitmap := SelectObject(MemDC, MemBitmap);
try
DC := BeginPaint( Handle, PS);
Perform(WM_ERASEBKGND, MemDC, MemDC);
Message.DC := MemDC;
WMPaint( Message);
Message.DC := 0;
BitBlt( DC, 0, 0, ClientRect.Right, ClientRect.Bottom, MemDC, 0, 0, SRCCOPY);
EndPaint( Handle, PS);
finally
SelectObject(MemDC, OldBitmap);
DeleteDC(MemDC);
DeleteObject(MemBitmap);
end;
end;
Ich habe allerdings kein Vista, sodass ich den Aero-Glass-Effekt nicht kommentieren kann.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
|
|
Zitat
|