Избежание необходимости вызывать ProcessMessages - PullRequest
7 голосов
/ 29 апреля 2010

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

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

Ответы [ 2 ]

11 голосов
/ 29 апреля 2010

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

4 голосов
/ 26 ноября 2010

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

...