Delphi / Builder / VCL, Переопределить WM_PAINT формы без потери двойной буферизации? - PullRequest
2 голосов
/ 28 февраля 2012

Я использую BCB6, но он должен быть таким же, как Delphi, если я просто добавлю такой обработчик в свою форму:

void __fastcall TForm1::WndProc(TMessage &Message)

И обработаю WM_PAINT, я не получу преимуществаDoubleBuffered, который обеспечивает TWinControl.Есть ли способ сделать какую-либо пользовательскую рисование в форме, которая учитывает настройку DoubleBuffered (она также записывает в битовую карту памяти, которую создает TWinControl)?

Эта функция в controls.pas применяется к DoubleBuffered:

procedure WMPaint(var Message: TWMPaint); message WM_PAINT;

Создает растровое изображение памяти, а затем снова вызывает себя.Поэтому мне нужен способ вызова этой функции, когда Message.DC равен 0, поэтому он создаст растровое изображение, а затем я не буду вызывать его снова после этого ... но WMPaint не является виртуальным, как и PaintHandler, поэтому яЯ не вижу способа подключиться к этому.

Я знаю, что могу создать свою собственную двойную буферизацию, но я бы предпочел использовать то, что уже есть, если это возможно.Я планирую перенести этот дизайн и на другие элементы управления, а не только на мою форму.

1 Ответ

5 голосов
/ 28 февраля 2012

Переопределите метод Paint вместо попытки обработки WM_PAINT сообщений. Таким образом, встроенный механизм двойной буферизации все еще будет активен, но вы можете настроить свою картину.

...