[PATCH] user32: use InvalidateRect to repaint buttons
Nikolay Sivov
bunglehead at gmail.com
Sun Feb 15 09:59:42 CST 2015
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.
More information about the wine-devel
mailing list