As far as I know, (Honza post in summary ), you draw all Ctrl Rect but U++ finally only paints on the screen updated area (that is the slower side of painting).
This way code is simple but effective.
Put here the slowest part of your code, in a package better, and I am sure it will finally work fast.