X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7406cb31ed5aeba3e77dfbc7d21123f912efa8ae..917be7ed065337e8a7a67615969ecaade9eea809:/src/msw/tbar95.cpp diff --git a/src/msw/tbar95.cpp b/src/msw/tbar95.cpp index 1d667c258d..d1079d550c 100644 --- a/src/msw/tbar95.cpp +++ b/src/msw/tbar95.cpp @@ -85,6 +85,10 @@ #define TB_HITTEST (WM_USER + 69) #endif +#ifndef TB_GETMAXSIZE + #define TB_GETMAXSIZE (WM_USER + 83) +#endif + // these values correspond to those used by comctl32.dll #define DEFAULTBITMAPX 16 #define DEFAULTBITMAPY 15 @@ -338,11 +342,32 @@ wxToolBar::~wxToolBar() wxSize wxToolBar::DoGetBestSize() const { - wxSize sizeBest = GetToolSize(); - sizeBest.x *= GetToolsCount(); + wxSize sizeBest; + + SIZE size; + if ( !::SendMessage(GetHwnd(), TB_GETMAXSIZE, 0, (LPARAM)&size) ) + { + // maybe an old (< 0x400) Windows version? try to approximate the + // toolbar size ourselves + sizeBest = GetToolSize(); + sizeBest.y += 2 * ::GetSystemMetrics(SM_CYBORDER); // Add borders + sizeBest.x *= GetToolsCount(); + + // reverse horz and vertical components if necessary + if ( HasFlag(wxTB_VERTICAL) ) + { + int t = sizeBest.x; + sizeBest.x = sizeBest.y; + sizeBest.y = t; + } + } + else + { + sizeBest.x = size.cx; + sizeBest.y = size.cy; + } - // reverse horz and vertical components if necessary - return HasFlag(wxTB_VERTICAL) ? wxSize(sizeBest.y, sizeBest.x) : sizeBest; + return sizeBest; } WXDWORD wxToolBar::MSWGetStyle(long style, WXDWORD *exstyle) const