Избежание необходимости вызывать ProcessMessages

У меня есть компонент, который я создал, который встраивает аппаратно-ускоренный рендер в TWinControl, чтобы вы могли поместить его в форму. В большинстве случаев он работает довольно хорошо, но если я пытаюсь изменить размер элемента управления, все становится пустым, пока цикл сообщений не запустится и не вызовет WndProc для средства визуализации, которое размещено во внешней DLL. Это означает, что мне нужно явно вызывать Application.ProcessMessages после изменения размера элемента управления в коде, что, как я знаю, считается плохой практикой.

Есть ли способ поместить некоторую логику в сам элемент управления, чтобы он вызывал WndProc в DLL, когда я изменяю размер элемента управления, поэтому мне не нужно вызывать ProcessMessages, чтобы заставить вещи отображаться правильно?

2 ответа

Решение

Вы могли бы позвонить TWinControl.Update вместо этого, который должен просто SendMessage событие WM_PAINT, чтобы вы не обрабатывали произвольные сообщения.

Правильным решением является вызов InvalidateRect при изменении размера. Затем Windows отправит вам сообщение WM_PAINT. Для справки вы должны снять Petzold с полки и прочитать его главу о живописи.

Другие вопросы по тегам