On 03/31/2015 10:45 PM, Mark Harmstone wrote:
This patch changes comctl32 to handle BM_SETSTATE itself when sent to a themed button, rather than forwarding it to user32. This way, the theming isn't temporarily lost when user32 repaints it.
- case BM_SETSTATE:
- {
int state = (int)SendMessageW(hwnd, BM_GETSTATE, 0, 0);
if (wParam)
SetWindowLongW(hwnd, 0, state | BST_PUSHED);
else
SetWindowLongW(hwnd, 0, state & ~BST_PUSHED);
InvalidateRect(hwnd, NULL, FALSE);
break;
- }
I guess you can GetWindowLongW(...,0,...) instead of sending a message? But what's more important is that all these difference in behavior comparing to user32 controls should not be visible only when you have an active theme. It's actually another version of same Button control with additional messages and different behavior in some aspects, including theming-aware drawing. So my point is that theming support is secondary, what's important is class redirection support, and I'm worried if these theming-only changes will make it more difficult to fix properly later.
P.S. 0 window data index is actually implementation details of user32 (I don't know if it's compatible with native one with that regard or not).