On 11.02.2015 0:48, Mark Harmstone wrote:
At present, whenever a button needs to be redrawn user32 calls its own internal function. This causes problems if the button is subclassed, as the superclass then won't receive the WM_PAINT message - this is why themed buttons lose their theme when you click on them. This patch changes it to instead call InvalidateRect, which will force a WM_PAINT message to be sent to the topmost class.
dlls/user32/button.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-)
That sounds like a case when proper fix is to reimplement themed controls in comctl32, the way Windows does that. I remember when I copied over tests for buttons to comctl32/tests I had to fix painting sequences too.
To make it work properly we'll need to make comctl32 register separate classes, when loaded within context, or even better - to build two separate modules like windows does. Those separate classes should be named as "Classname!x.x.x.x", where x.x.x.x is a comctl32 version. After this done user32 needs to be fixed at CreateWindow() level to properly forward to those classes.