Signed-off-by: Jeff Smith whydoubt@gmail.com --- dlls/user32/tests/Makefile.in | 1 + dlls/user32/tests/colormsg.c | 205 ++++++++++++++++++++++++++++++++++ 2 files changed, 206 insertions(+) create mode 100644 dlls/user32/tests/colormsg.c
diff --git a/dlls/user32/tests/Makefile.in b/dlls/user32/tests/Makefile.in index dd101d69f3c..38f1572cbb4 100644 --- a/dlls/user32/tests/Makefile.in +++ b/dlls/user32/tests/Makefile.in @@ -5,6 +5,7 @@ C_SRCS = \ broadcast.c \ class.c \ clipboard.c \ + colormsg.c \ combo.c \ cursoricon.c \ dce.c \ diff --git a/dlls/user32/tests/colormsg.c b/dlls/user32/tests/colormsg.c new file mode 100644 index 00000000000..5916d59403c --- /dev/null +++ b/dlls/user32/tests/colormsg.c @@ -0,0 +1,205 @@ +/* Unit test suite for control coloring via messages. + * + * Copyright 2020 Jeff Smith + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <stdarg.h> +#include <stdio.h> + +#define STRICT +#define WIN32_LEAN_AND_MEAN +#include <windows.h> + +#include "wine/test.h" + +#define CTRL_ID 1995 + +struct color_values +{ + HBRUSH brush; + COLORREF brushcolor; + COLORREF altbrushcolor; + COLORREF pencolor; + COLORREF textcolor; + COLORREF bkcolor; + int bkmode; +} static *color_test = NULL; + +static UINT msg_expect; + +static HWND hMainWnd; + +static HWND build_child(const char *class, DWORD style) +{ + return CreateWindowA(class, "Test", WS_VISIBLE|WS_CHILD|style, 5, 5, 100, 100, hMainWnd, (HMENU)CTRL_ID, NULL, 0); +} + +static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) +{ + switch (msg) + { + case WM_CTLCOLORBTN: + case WM_CTLCOLORSTATIC: + if (!color_test) + break; + + ok(msg == msg_expect, "Expected message %#x got %#x\n", msg, msg_expect); + if (msg == msg_expect) + { + HDC hdc = (HDC)wparam; + if (color_test->bkmode) + SetBkMode(hdc, color_test->bkmode); + if (color_test->altbrushcolor != CLR_INVALID) + SetDCBrushColor(hdc, color_test->altbrushcolor); + if (color_test->pencolor != CLR_INVALID) + SetDCPenColor(hdc, color_test->pencolor); + if (color_test->textcolor != CLR_INVALID) + SetTextColor(hdc, color_test->textcolor); + if (color_test->bkcolor != CLR_INVALID) + SetBkColor(hdc, color_test->bkcolor); + if (!color_test->brush && color_test->brushcolor != CLR_INVALID) + color_test->brush = CreateSolidBrush(color_test->brushcolor); + return (LRESULT)color_test->brush; + } + } + + return DefWindowProcA(hwnd, msg, wparam, lparam); +} + +static void test_style_message(const char *class, int style, LONG inside_x, LONG inside_y) +{ +#define INV CLR_INVALID + struct color_values tests[] = + { + /* WndProc will return NULL */ + {NULL, INV, INV, INV, INV, INV}, + /* WndProc will return non-object */ + {(HBRUSH)(COLOR_HIGHLIGHT+1), INV, INV, INV, INV, INV}, + /* WndProc will return object */ + {NULL, RGB(255,0,0), INV, INV, INV, INV}, + {NULL, RGB(255,0,0), INV, INV, INV, INV, TRANSPARENT}, + {NULL, RGB(255,0,0), RGB(0,255,0), RGB(0,0,255), RGB(255,255,0), + RGB(255,0,255)}, + {NULL, RGB(255,0,0), RGB(0,255,0), RGB(0,0,255), RGB(255,255,0), + RGB(255,0,255), TRANSPARENT}, + }; +#undef INV + COLORREF icolor0, ocolor0; + COLORREF icolor_exp, ocolor_exp; + POINT ptOutside = {90, 90}; + HWND hChild; + HDC hdc; + int i; + + int is_simple = !strcmp(class,"static") && style == SS_SIMPLE; + int is_groupbox = !strcmp(class,"button") && style == BS_GROUPBOX; + int is_pushbutton = !strcmp(class,"button") && + (style == BS_PUSHBUTTON || style == BS_DEFPUSHBUTTON || style == BS_USERBUTTON); + + hChild = build_child(class, style); + SetWindowTextA(hChild, "____"); + msg_expect = is_pushbutton ? WM_CTLCOLORBTN : WM_CTLCOLORSTATIC; + + /* Get system colors for child window */ + InvalidateRect(hChild, NULL, FALSE); + UpdateWindow(hChild); + hdc = GetDC(hChild); + icolor0 = GetPixel(hdc, inside_x, inside_y); + ocolor0 = GetPixel(hdc, ptOutside.x, ptOutside.y); + ReleaseDC(hChild, hdc); + + ocolor_exp = (is_simple || is_groupbox) ? RGB(255, 255, 255) : icolor0; + ok(ocolor0 == ocolor_exp, "(%s,%#x) Expected color %#x outside text area, got %#x\n", + class, style, ocolor_exp, ocolor0); + + for (i = 0; i < ARRAY_SIZE(tests); i++) + { + COLORREF icolor, ocolor; + + /* Update child window with default colors */ + InvalidateRect(hChild, NULL, FALSE); + UpdateWindow(hChild); + + /* Update child window to exercise control color message */ + color_test = &tests[i]; + InvalidateRect(hChild, NULL, FALSE); + UpdateWindow(hChild); + color_test = NULL; + hdc = GetDC(hChild); + icolor = GetPixel(hdc, inside_x, inside_y); + ocolor = GetPixel(hdc, ptOutside.x, ptOutside.y); + ReleaseDC(hChild, hdc); + + icolor_exp = (tests[i].brushcolor == CLR_INVALID || is_pushbutton) ? icolor0 : + (is_simple && tests[i].bkmode == TRANSPARENT) ? icolor0 : + (tests[i].bkmode == TRANSPARENT) ? tests[i].brushcolor : + (tests[i].bkcolor != CLR_INVALID) ? tests[i].bkcolor : RGB(255, 255, 255); + ocolor_exp = (tests[i].brushcolor == CLR_INVALID || is_pushbutton || is_simple || + is_groupbox) ? ocolor0 : tests[i].brushcolor; + todo_wine_if(tests[i].brush != NULL && tests[i].brushcolor == CLR_INVALID && !is_pushbutton) + ok(icolor == icolor_exp, "(%s,%#x,%d) Expected color %#x inside text area, got %#x\n", + class, style, i, icolor_exp, icolor); + todo_wine_if(tests[i].brush != NULL && tests[i].brushcolor == CLR_INVALID && !is_pushbutton && + !is_simple && !is_groupbox) + ok(ocolor == ocolor_exp, "(%s,%#x,%d) Expected color %#x outside text area, got %#x\n", + class, style, i, ocolor_exp, ocolor); + } + DestroyWindow(hChild); +} + +START_TEST(colormsg) +{ + static const char szClassName[] = "testclass"; + WNDCLASSEXA wndclass; + + wndclass.cbSize = sizeof(wndclass); + wndclass.style = CS_HREDRAW | CS_VREDRAW; + wndclass.lpfnWndProc = WndProc; + wndclass.cbClsExtra = 0; + wndclass.cbWndExtra = 0; + wndclass.hInstance = GetModuleHandleA(NULL); + wndclass.hIcon = LoadIconA(NULL, (LPCSTR)IDI_APPLICATION); + wndclass.hIconSm = LoadIconA(NULL, (LPCSTR)IDI_APPLICATION); + wndclass.hCursor = LoadCursorA(NULL, (LPCSTR)IDC_ARROW); + wndclass.hbrBackground = GetStockObject(WHITE_BRUSH); + wndclass.lpszClassName = szClassName; + wndclass.lpszMenuName = NULL; + RegisterClassExA(&wndclass); + + hMainWnd = CreateWindowA(szClassName, "Test", WS_OVERLAPPEDWINDOW, 0, 0, 500, 500, NULL, NULL, GetModuleHandleA(NULL), NULL); + ShowWindow(hMainWnd, SW_SHOW); + + test_style_message("static", SS_SIMPLE, 5, 5); + test_style_message("static", SS_LEFT, 5, 5); + test_style_message("static", SS_RIGHT, 95, 5); + test_style_message("static", SS_CENTER, 50, 5); + test_style_message("static", SS_LEFTNOWORDWRAP, 5, 5); + + test_style_message("button", BS_CHECKBOX, 25, 50); + test_style_message("button", BS_AUTOCHECKBOX, 25, 50); + test_style_message("button", BS_RADIOBUTTON, 25, 50); + test_style_message("button", BS_AUTORADIOBUTTON, 25, 50); + test_style_message("button", BS_3STATE, 25, 50); + test_style_message("button", BS_AUTO3STATE, 25, 50); + test_style_message("button", BS_GROUPBOX, 20, 5); + + test_style_message("button", BS_PUSHBUTTON, 50, 50); + test_style_message("button", BS_DEFPUSHBUTTON, 50, 50); + test_style_message("button", BS_USERBUTTON, 50, 50); + + DestroyWindow(hMainWnd); +}
Signed-off-by: Jeff Smith whydoubt@gmail.com --- dlls/user32/button.c | 68 +++++++++++++++----------------------------- 1 file changed, 23 insertions(+), 45 deletions(-)
diff --git a/dlls/user32/button.c b/dlls/user32/button.c index e3af68e0e54..bbb56edb792 100644 --- a/dlls/user32/button.c +++ b/dlls/user32/button.c @@ -177,6 +177,22 @@ static inline WCHAR *get_button_text( HWND hwnd ) return buffer; }
+static HBRUSH BUTTON_BrushSendMessage( HWND hwnd, HDC hDC, UINT message ) +{ + HBRUSH hBrush; + HWND parent; + + parent = GetParent( hwnd ); + if (!parent) + parent = hwnd; + + hBrush = (HBRUSH)SendMessageW( parent, message, (WPARAM)hDC, (LPARAM)hwnd ); + /* did the app forget to call defwindowproc ? */ + if (!hBrush) + hBrush = (HBRUSH)DefWindowProcW( parent, message, (WPARAM)hDC, (LPARAM)hwnd ); + return hBrush; +} + /*********************************************************************** * ButtonWndProc_common */ @@ -230,13 +246,7 @@ LRESULT ButtonWndProc_common(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, { HDC hdc = (HDC)wParam; RECT rc; - HBRUSH hBrush; - HWND parent = GetParent(hWnd); - if (!parent) parent = hWnd; - hBrush = (HBRUSH)SendMessageW(parent, WM_CTLCOLORBTN, (WPARAM)hdc, (LPARAM)hWnd); - if (!hBrush) /* did the app forget to call defwindowproc ? */ - hBrush = (HBRUSH)DefWindowProcW(parent, WM_CTLCOLORBTN, - (WPARAM)hdc, (LPARAM)hWnd); + HBRUSH hBrush = BUTTON_BrushSendMessage( hWnd, hdc, WM_CTLCOLORBTN ); GetClientRect(hWnd, &rc); FillRect(hdc, &rc, hBrush); } @@ -350,21 +360,14 @@ LRESULT ButtonWndProc_common(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, if (IsWindowVisible(hWnd)) { HDC hdc = GetDC(hWnd); - HBRUSH hbrush; RECT client, rc; - HWND parent = GetParent(hWnd); UINT message = (btn_type == BS_PUSHBUTTON || btn_type == BS_DEFPUSHBUTTON || btn_type == BS_USERBUTTON || btn_type == BS_OWNERDRAW) ? WM_CTLCOLORBTN : WM_CTLCOLORSTATIC;
- if (!parent) parent = hWnd; - hbrush = (HBRUSH)SendMessageW(parent, message, - (WPARAM)hdc, (LPARAM)hWnd); - if (!hbrush) /* did the app forget to call DefWindowProc ? */ - hbrush = (HBRUSH)DefWindowProcW(parent, message, - (WPARAM)hdc, (LPARAM)hWnd); + HBRUSH hbrush = BUTTON_BrushSendMessage( hWnd, hdc, message );
GetClientRect(hWnd, &client); rc = client; @@ -738,16 +741,13 @@ static void PB_Paint( HWND hwnd, HDC hDC, UINT action ) LONG state = get_button_state( hwnd ); LONG style = GetWindowLongW( hwnd, GWL_STYLE ); BOOL pushedState = (state & BST_PUSHED); - HWND parent; HRGN hrgn;
GetClientRect( hwnd, &rc );
/* Send WM_CTLCOLOR to allow changing the font (the colors are fixed) */ if ((hFont = get_button_font( hwnd ))) SelectObject( hDC, hFont ); - parent = GetParent(hwnd); - if (!parent) parent = hwnd; - SendMessageW( parent, WM_CTLCOLORBTN, (WPARAM)hDC, (LPARAM)hwnd ); + BUTTON_BrushSendMessage( hwnd, hDC, WM_CTLCOLORBTN );
hrgn = set_control_clipping( hDC, &rc );
@@ -827,7 +827,6 @@ static void CB_Paint( HWND hwnd, HDC hDC, UINT action ) LONG state = get_button_state( hwnd ); LONG style = GetWindowLongW( hwnd, GWL_STYLE ); LONG ex_style = GetWindowLongW( hwnd, GWL_EXSTYLE ); - HWND parent; HRGN hrgn;
if (style & BS_PUSHLIKE) @@ -846,13 +845,7 @@ static void CB_Paint( HWND hwnd, HDC hDC, UINT action ) GetCharWidthW( hDC, '0', '0', &text_offset ); text_offset /= 2;
- parent = GetParent(hwnd); - if (!parent) parent = hwnd; - hBrush = (HBRUSH)SendMessageW(parent, WM_CTLCOLORSTATIC, - (WPARAM)hDC, (LPARAM)hwnd); - if (!hBrush) /* did the app forget to call defwindowproc ? */ - hBrush = (HBRUSH)DefWindowProcW(parent, WM_CTLCOLORSTATIC, - (WPARAM)hDC, (LPARAM)hwnd ); + hBrush = BUTTON_BrushSendMessage( hwnd, hDC, WM_CTLCOLORSTATIC ); hrgn = set_control_clipping( hDC, &client );
if (style & BS_LEFTTEXT || ex_style & WS_EX_RIGHT) @@ -981,17 +974,11 @@ static void GB_Paint( HWND hwnd, HDC hDC, UINT action ) UINT dtFlags; TEXTMETRICW tm; LONG style = GetWindowLongW( hwnd, GWL_STYLE ); - HWND parent; HRGN hrgn;
if ((hFont = get_button_font( hwnd ))) SelectObject( hDC, hFont ); /* GroupBox acts like static control, so it sends CTLCOLORSTATIC */ - parent = GetParent(hwnd); - if (!parent) parent = hwnd; - hbr = (HBRUSH)SendMessageW(parent, WM_CTLCOLORSTATIC, (WPARAM)hDC, (LPARAM)hwnd); - if (!hbr) /* did the app forget to call defwindowproc ? */ - hbr = (HBRUSH)DefWindowProcW(parent, WM_CTLCOLORSTATIC, - (WPARAM)hDC, (LPARAM)hwnd); + hbr = BUTTON_BrushSendMessage( hwnd, hDC, WM_CTLCOLORSTATIC ); GetClientRect( hwnd, &rc); rcFrame = rc; hrgn = set_control_clipping( hDC, &rc ); @@ -1032,18 +1019,12 @@ static void UB_Paint( HWND hwnd, HDC hDC, UINT action ) HBRUSH hBrush; HFONT hFont; LONG state = get_button_state( hwnd ); - HWND parent;
GetClientRect( hwnd, &rc);
if ((hFont = get_button_font( hwnd ))) SelectObject( hDC, hFont );
- parent = GetParent(hwnd); - if (!parent) parent = hwnd; - hBrush = (HBRUSH)SendMessageW(parent, WM_CTLCOLORBTN, (WPARAM)hDC, (LPARAM)hwnd); - if (!hBrush) /* did the app forget to call defwindowproc ? */ - hBrush = (HBRUSH)DefWindowProcW(parent, WM_CTLCOLORBTN, - (WPARAM)hDC, (LPARAM)hwnd); + hBrush = BUTTON_BrushSendMessage( hwnd, hDC, WM_CTLCOLORBTN );
FillRect( hDC, &rc, hBrush ); if (action == ODA_FOCUS || (state & BST_FOCUS)) @@ -1075,7 +1056,6 @@ static void OB_Paint( HWND hwnd, HDC hDC, UINT action ) LONG state = get_button_state( hwnd ); DRAWITEMSTRUCT dis; LONG_PTR id = GetWindowLongPtrW( hwnd, GWLP_ID ); - HWND parent; HFONT hFont; HRGN hrgn;
@@ -1092,9 +1072,7 @@ static void OB_Paint( HWND hwnd, HDC hDC, UINT action ) GetClientRect( hwnd, &dis.rcItem );
if ((hFont = get_button_font( hwnd ))) SelectObject( hDC, hFont ); - parent = GetParent(hwnd); - if (!parent) parent = hwnd; - SendMessageW( parent, WM_CTLCOLORBTN, (WPARAM)hDC, (LPARAM)hwnd ); + BUTTON_BrushSendMessage( hwnd, hDC, WM_CTLCOLORBTN );
hrgn = set_control_clipping( hDC, &dis.rcItem );
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=79518
Your paranoid android.
=== debiant (32 bit report) ===
user32: monitor: Timeout
=== debiant (32 bit Chinese:China report) ===
user32: monitor: Timeout
=== debiant (32 bit WoW report) ===
user32: monitor: Timeout
=== debiant (64 bit WoW report) ===
user32: monitor: Timeout
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=14113 Signed-off-by: Jeff Smith whydoubt@gmail.com --- dlls/user32/button.c | 2 +- dlls/user32/static.c | 3 ++- dlls/user32/tests/colormsg.c | 3 --- 3 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/dlls/user32/button.c b/dlls/user32/button.c index bbb56edb792..9b73381353c 100644 --- a/dlls/user32/button.c +++ b/dlls/user32/button.c @@ -188,7 +188,7 @@ static HBRUSH BUTTON_BrushSendMessage( HWND hwnd, HDC hDC, UINT message )
hBrush = (HBRUSH)SendMessageW( parent, message, (WPARAM)hDC, (LPARAM)hwnd ); /* did the app forget to call defwindowproc ? */ - if (!hBrush) + if (!hBrush || GetObjectType(hBrush) != OBJ_BRUSH) hBrush = (HBRUSH)DefWindowProcW( parent, message, (WPARAM)hDC, (LPARAM)hwnd ); return hBrush; } diff --git a/dlls/user32/static.c b/dlls/user32/static.c index 72e49e15e8f..32f19a90277 100644 --- a/dlls/user32/static.c +++ b/dlls/user32/static.c @@ -293,7 +293,8 @@ static HBRUSH STATIC_SendWmCtlColorStatic(HWND hwnd, HDC hdc) if (!parent) parent = hwnd; hBrush = (HBRUSH) SendMessageW( parent, WM_CTLCOLORSTATIC, (WPARAM)hdc, (LPARAM)hwnd ); - if (!hBrush) /* did the app forget to call DefWindowProc ? */ + /* did the app forget to call DefWindowProc ? */ + if (!hBrush || GetObjectType(hBrush) != OBJ_BRUSH) { /* FIXME: DefWindowProc should return different colors if a manifest is present */ diff --git a/dlls/user32/tests/colormsg.c b/dlls/user32/tests/colormsg.c index 5916d59403c..e65d286e856 100644 --- a/dlls/user32/tests/colormsg.c +++ b/dlls/user32/tests/colormsg.c @@ -150,11 +150,8 @@ static void test_style_message(const char *class, int style, LONG inside_x, LONG (tests[i].bkcolor != CLR_INVALID) ? tests[i].bkcolor : RGB(255, 255, 255); ocolor_exp = (tests[i].brushcolor == CLR_INVALID || is_pushbutton || is_simple || is_groupbox) ? ocolor0 : tests[i].brushcolor; - todo_wine_if(tests[i].brush != NULL && tests[i].brushcolor == CLR_INVALID && !is_pushbutton) ok(icolor == icolor_exp, "(%s,%#x,%d) Expected color %#x inside text area, got %#x\n", class, style, i, icolor_exp, icolor); - todo_wine_if(tests[i].brush != NULL && tests[i].brushcolor == CLR_INVALID && !is_pushbutton && - !is_simple && !is_groupbox) ok(ocolor == ocolor_exp, "(%s,%#x,%d) Expected color %#x outside text area, got %#x\n", class, style, i, ocolor_exp, ocolor); }
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=79519
Your paranoid android.
=== debiant (32 bit report) ===
user32: monitor: Timeout
=== debiant (32 bit Chinese:China report) ===
user32: monitor: Timeout
=== debiant (32 bit WoW report) ===
user32: monitor: Timeout
=== debiant (64 bit WoW report) ===
user32: monitor: Timeout
Jeff Smith whydoubt@gmail.com writes:
Signed-off-by: Jeff Smith whydoubt@gmail.com
dlls/user32/tests/Makefile.in | 1 + dlls/user32/tests/colormsg.c | 205 ++++++++++++++++++++++++++++++++++ 2 files changed, 206 insertions(+) create mode 100644 dlls/user32/tests/colormsg.c
diff --git a/dlls/user32/tests/Makefile.in b/dlls/user32/tests/Makefile.in index dd101d69f3c..38f1572cbb4 100644 --- a/dlls/user32/tests/Makefile.in +++ b/dlls/user32/tests/Makefile.in @@ -5,6 +5,7 @@ C_SRCS = \ broadcast.c \ class.c \ clipboard.c \
- colormsg.c \
This doesn't warrant creating a new file. Please put the new test into one of the existing files.
On 9/30/20 6:16 AM, Jeff Smith wrote:
+#define INV CLR_INVALID
- struct color_values tests[] =
- {
/* WndProc will return NULL */
{NULL, INV, INV, INV, INV, INV},
/* WndProc will return non-object */
{(HBRUSH)(COLOR_HIGHLIGHT+1), INV, INV, INV, INV, INV},
/* WndProc will return object */
{NULL, RGB(255,0,0), INV, INV, INV, INV},
{NULL, RGB(255,0,0), INV, INV, INV, INV, TRANSPARENT},
{NULL, RGB(255,0,0), RGB(0,255,0), RGB(0,0,255), RGB(255,255,0),
RGB(255,0,255)},
{NULL, RGB(255,0,0), RGB(0,255,0), RGB(0,0,255), RGB(255,255,0),
RGB(255,0,255), TRANSPARENT},
- };
+#undef INV
Doesn't seem worth it to temporarily declare a macro for this.
- int is_simple = !strcmp(class,"static") && style == SS_SIMPLE;
- int is_groupbox = !strcmp(class,"button") && style == BS_GROUPBOX;
- int is_pushbutton = !strcmp(class,"button") &&
(style == BS_PUSHBUTTON || style == BS_DEFPUSHBUTTON || style == BS_USERBUTTON);
- test_style_message("static", SS_SIMPLE, 5, 5);
- test_style_message("static", SS_LEFT, 5, 5);
- test_style_message("static", SS_RIGHT, 95, 5);
- test_style_message("static", SS_CENTER, 50, 5);
- test_style_message("static", SS_LEFTNOWORDWRAP, 5, 5);
- test_style_message("button", BS_CHECKBOX, 25, 50);
- test_style_message("button", BS_AUTOCHECKBOX, 25, 50);
- test_style_message("button", BS_RADIOBUTTON, 25, 50);
- test_style_message("button", BS_AUTORADIOBUTTON, 25, 50);
- test_style_message("button", BS_3STATE, 25, 50);
- test_style_message("button", BS_AUTO3STATE, 25, 50);
- test_style_message("button", BS_GROUPBOX, 20, 5);
- test_style_message("button", BS_PUSHBUTTON, 50, 50);
- test_style_message("button", BS_DEFPUSHBUTTON, 50, 50);
- test_style_message("button", BS_USERBUTTON, 50, 50);
I think it makes more sense to move this to respective control file, especially when duplicating this in comctl32 tests.