diff --git a/dlls/comctl32/commctrl.c b/dlls/comctl32/commctrl.c index c21cae31306..7e44e0304d5 100644 --- a/dlls/comctl32/commctrl.c +++ b/dlls/comctl32/commctrl.c @@ -693,12 +693,13 @@ CreateToolbarEx (HWND hwnd, DWORD style, UINT wID, INT nBitmaps, SendMessageW (hwndTB, TB_SETBITMAPSIZE, 0, MAKELPARAM((WORD)dxBitmap, (WORD)dyBitmap)); - if (dxButton <= 0) - dxButton = 24; - if (dyButton <= 0) - dyButton = 22; - SendMessageW (hwndTB, TB_SETBUTTONSIZE, 0, - MAKELPARAM((WORD)dxButton, (WORD)dyButton)); + if (dxButton < 0) + dxButton = dxBitmap; + if (dyButton < 0) + dyButton = dyBitmap; + /* TB_SETBUTTONSIZE -> TB_SETBITMAPSIZE bug introduced for Windows compatibility */ + if (dxButton != 0 && dyButton != 0) + SendMessageW(hwndTB, TB_SETBITMAPSIZE, 0, MAKELPARAM(dxButton, dyButton)); /* add bitmaps */ diff --git a/dlls/comctl32/tests/toolbar.c b/dlls/comctl32/tests/toolbar.c index 164644e029f..b58329541d6 100644 --- a/dlls/comctl32/tests/toolbar.c +++ b/dlls/comctl32/tests/toolbar.c @@ -869,6 +869,45 @@ static void test_sizes(void) DestroyWindow(hToolbar); } + +static void test_createtoolbarex() +{ + HWND hToolbar; + TBBUTTON btns[3]; + ZeroMemory(&btns, sizeof(btns)); + + hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandle(NULL), IDB_BITMAP_128x15, btns, + 3, 20, 20, 16, 16, sizeof(TBBUTTON)); + CHECK_IMAGELIST(16, 20, 20); + compare((int)SendMessage(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0x1a001b, "%x"); + DestroyWindow(hToolbar); + + hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandle(NULL), IDB_BITMAP_128x15, btns, + 3, 4, 4, 16, 16, sizeof(TBBUTTON)); + CHECK_IMAGELIST(32, 4, 4); + compare((int)SendMessage(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0xa000b, "%x"); + DestroyWindow(hToolbar); + + hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandle(NULL), IDB_BITMAP_128x15, btns, + 3, 0, 8, 12, 12, sizeof(TBBUTTON)); + CHECK_IMAGELIST(16, 12, 12); + compare((int)SendMessage(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0x120013, "%x"); + DestroyWindow(hToolbar); + + hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandle(NULL), IDB_BITMAP_128x15, btns, + 3, -1, 8, 12, 12, sizeof(TBBUTTON)); + CHECK_IMAGELIST(16, 12, 8); + compare((int)SendMessage(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0xe0013, "%x"); + DestroyWindow(hToolbar); + + hToolbar = CreateToolbarEx(hMainWnd, WS_VISIBLE, 1, 16, GetModuleHandle(NULL), IDB_BITMAP_128x15, btns, + 3, -1, 8, -1, 12, sizeof(TBBUTTON)); + CHECK_IMAGELIST(16, 16, 8); + compare((int)SendMessage(hToolbar, TB_GETBUTTONSIZE, 0, 0), 0xe0017, "%x"); + DestroyWindow(hToolbar); +} + + START_TEST(toolbar) { WNDCLASSA wc; @@ -899,6 +938,7 @@ START_TEST(toolbar) test_add_string(); test_hotitem(); test_sizes(); + test_createtoolbarex(); PostQuitMessage(0); while(GetMessageA(&msg,0,0,0)) {