2009-02-23 5 views
-1

Я пытаюсь написать пользовательский потомок TGraphicControl, который позволит пользователю встраивать поверхность визуализации SDL в форму VCL. Это обеспечит простой способ отображения анимаций SDL в форме.Когда называется TGraphicControl.Paint?

По-видимому, TGraphicControl перерисовывается методом Paint. Как часто это называется? Это только когда что-то происходит, чтобы аннулировать элемент управления, или есть другие вещи, которые его называют? Как это взаимодействует с чем-то, что делает собственный рисунок?

ответ

1

Вопрос 1: Как часто это называется?

См ответ Mghie: всякий раз, когда контроль родительского окна обрабатывает сообщение WM_PAINT

Вопрос 2: ли это только тогда, когда что-то происходит с аннулированию контроль, или есть другие вещи, которые назови это?

См ответ Mghie: только тогда, когда он признан недействительным

Вопрос 3: Как , что взаимодействовать с чем-то, что делает свой рисунок?

Вы должны поместить свою собственную процедуру рисования в метод Paint для потокового потомка TGraphicControl - с помощью директивы переопределения. Рисование в методе Paint не будет отправлять другое сообщение WM-PAINT. В методе Paint вы можете рисовать на холсте, не входя в контур сообщения WM-PAINT. Сделайте свой код рисунка как можно быстрее, потому что вокруг него могут появиться сообщения WM-PAINT. Если процедура рисования занимает много времени, ваше приложение будет выглядеть вялым/невосприимчивым.

+0

Вы говорите, что вы можете создать какой-то бесконечный цикл рисования, если вы нарисуете элемент управления вне события wm_Paint. Это не так. Вы можете рисовать элемент управления каждый раз, когда холст доступен, что почти всегда, когда у родительского элемента управления есть дескриптор окна. –

6

Метод Paint для элемента управления без окон (который TGraphicControl) вызывается, когда оконный элемент управления под ним перерисовывается. Это происходит, когда обрабатывается сообщение WM_PAINT для оконного элемента управления.

Окно управления перерисовывается либо когда вся его область или части его были признаны недействительными, либо когда другое окно, которое было выше в Z-порядке, закрыто или перемещено, чтобы окно было открыто и его необходимо перерисовать ,

Invalidating TGraphicControl вычислит соответствующую часть оконного родительского элемента управления и аннулирует эту часть.

Если вам требуется TGraphicControl для перерисовки, вам необходимо вызвать Invalidate на нем или его родительский элемент управления. Другого способа вызвать перерисовку нет.

Смежные вопросы