https://git.reactos.org/?p=reactos.git;a=commitdiff;h=1bfbdb612305efa463d3fc...
commit 1bfbdb612305efa463d3fc5846e0c3b40dcc3a02 Author: Giannis Adamopoulos gadamopoulos@reactos.org AuthorDate: Mon Nov 20 18:51:03 2017 +0200
[COMCTL32] Button: Use double buffering when themes are enabled. --- dll/win32/comctl32/theme_button.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+)
diff --git a/dll/win32/comctl32/theme_button.c b/dll/win32/comctl32/theme_button.c index 755f4a7f06..4e72b0aa29 100644 --- a/dll/win32/comctl32/theme_button.c +++ b/dll/win32/comctl32/theme_button.c @@ -456,6 +456,36 @@ BOOL BUTTON_PaintWithTheme(HTHEME theme, HWND hwnd, HDC hParamDC, LPARAM prfFlag else drawState = STATE_NORMAL;
+ if (paint == PB_draw || paint == CB_draw) + { + HDC hdc; + HBITMAP hbmp; + RECT rc; + + GetClientRect(hwnd, &rc); + hdc = CreateCompatibleDC(hParamDC); + hbmp = CreateCompatibleBitmap(hParamDC, rc.right, rc.bottom); + if (hdc && hbmp) + { + SelectObject(hdc, hbmp); + + paint(theme, hwnd, hdc, drawState, dtFlags, state & BST_FOCUS, prfFlag); + + BitBlt(hParamDC, 0, 0, rc.right, rc.bottom, hdc, 0, 0, SRCCOPY); + DeleteObject(hbmp); + DeleteDC(hdc); + return TRUE; + } + else + { + ERR("Failed to create DC and bitmap for double buffering\n"); + if (hbmp) + DeleteObject(hbmp); + if (hdc) + DeleteDC(hdc); + } + } + paint(theme, hwnd, hParamDC, drawState, dtFlags, state & BST_FOCUS, prfFlag); return TRUE; }