I've got a component I created that embeds a hardware-accelerated renderer in a TWinControl so you can place it on a form. It works pretty well in most cases, but if I try to resize the control, everything goes blank until the message loop runs and calls the WndProc for the renderer, which is hosted in an external DLL. This means that I need to call Application.ProcessMessages explicitly after I've resized the control in code, which I know is considered bad practice.
Is there any way to put some logic in the control itself to make it invoke the WndProc in the DLL when I change the control's size, so I won't need to call ProcessMessages to get stuff to render right?
You could call TWinControl.Update
instead, which should just SendMessage a WM_PAINT event, so you aren't handling arbitrary messages.
The correct solution is to call InvalidateRect when you resize. Windows will then post you a WM_PAINT message. For reference you should pull Petzold off the shelf and read his chapter on painting.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With