X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c25a510b30bd87f26deaf3532a48d29a158f0aea..737255678cb96a8296348fb62603afdd28133ec5:/src/msw/tbar95.cpp diff --git a/src/msw/tbar95.cpp b/src/msw/tbar95.cpp index d60c8baa0f..daa5ab3100 100644 --- a/src/msw/tbar95.cpp +++ b/src/msw/tbar95.cpp @@ -49,10 +49,7 @@ #ifndef __TWIN32__ -// I don't know what _OLD_ refers to so I'm reinstating the old -// ifdef (JACS). -// #ifdef __GNUWIN32_OLD__ -#if defined(__GNUWIN32__) && !defined(__MINGW32__) +#ifdef __GNUWIN32_OLD__ #include "wx/msw/gnuwin32/extra.h" #else #include @@ -195,7 +192,7 @@ bool wxToolBar::Create(wxWindow *parent, const wxString& name) { // common initialisation - if ( !CreateControl(parent, id, pos, size, style, name) ) + if ( !CreateControl(parent, id, pos, size, style, wxDefaultValidator, name) ) return FALSE; // prepare flags @@ -407,21 +404,42 @@ bool wxToolBar::Realize() // Map to system colours wxMapBitmap(hBitmap, totalBitmapWidth, totalBitmapHeight); + int bitmapId = 0; + + bool addBitmap = TRUE; + if ( oldToolBarBitmap ) { - TBREPLACEBITMAP replaceBitmap; - replaceBitmap.hInstOld = NULL; - replaceBitmap.hInstNew = NULL; - replaceBitmap.nIDOld = (UINT) oldToolBarBitmap; - replaceBitmap.nIDNew = (UINT) hBitmap; - replaceBitmap.nButtons = nButtons; - if ( !::SendMessage(GetHwnd(), TB_REPLACEBITMAP, - 0, (LPARAM) &replaceBitmap) ) +#ifdef TB_REPLACEBITMAP + if ( wxTheApp->GetComCtl32Version() >= 400 ) { - wxFAIL_MSG(wxT("Could not add bitmap to toolbar")); + TBREPLACEBITMAP replaceBitmap; + replaceBitmap.hInstOld = NULL; + replaceBitmap.hInstNew = NULL; + replaceBitmap.nIDOld = (UINT) oldToolBarBitmap; + replaceBitmap.nIDNew = (UINT) hBitmap; + replaceBitmap.nButtons = nButtons; + if ( !::SendMessage(GetHwnd(), TB_REPLACEBITMAP, + 0, (LPARAM) &replaceBitmap) ) + { + wxFAIL_MSG(wxT("Could not replace the old bitmap")); + } + + ::DeleteObject(oldToolBarBitmap); + + // already done + addBitmap = FALSE; } + else +#endif // TB_REPLACEBITMAP + { + // we can't replace the old bitmap, so we will add another one + // (awfully inefficient, but what else to do?) and shift the bitmap + // indices accordingly + addBitmap = TRUE; - ::DeleteObject(oldToolBarBitmap); + bitmapId = m_nButtons; + } // Now delete all the buttons for ( size_t pos = 0; pos < m_nButtons; pos++ ) @@ -431,8 +449,10 @@ bool wxToolBar::Realize() wxLogLastError("TB_DELETEBUTTON"); } } + } - else // no old bitmap + + if ( addBitmap ) // no old bitmap or we can't replace it { TBADDBITMAP addBitmap; addBitmap.hInst = 0; @@ -453,8 +473,6 @@ bool wxToolBar::Realize() wxArrayInt controlIds; int i = 0; - int bitmapId = 0; - for ( node = m_tools.GetFirst(); node; node = node->GetNext() ) { wxToolBarToolBase *tool = node->GetData(); @@ -550,7 +568,6 @@ bool wxToolBar::Realize() // the id is probably invalid? wxLogLastError("TB_SETBUTTONINFO"); } - } else #endif // comctl32.dll 4.71 @@ -563,7 +580,7 @@ bool wxToolBar::Realize() TBBUTTON tbb; wxZeroMemory(tbb); tbb.idCommand = 0; - tbb.fsState = TBSTATE_ENABLED; + tbb.fsState = TBSTATE_ENABLED | TBSTATE_HIDDEN; tbb.fsStyle = TBSTYLE_SEP; size_t nSeparators = size.x / widthSep; @@ -637,7 +654,7 @@ bool wxToolBar::MSWCommand(WXUINT cmd, WXWORD id) if ( tool->CanBeToggled() ) { LRESULT state = ::SendMessage(GetHwnd(), TB_GETSTATE, id, 0); - tool->SetToggle((state & TBSTATE_CHECKED) != 0); + tool->Toggle((state & TBSTATE_CHECKED) != 0); } bool toggled = tool->IsToggled(); @@ -790,7 +807,10 @@ wxToolBarToolBase *wxToolBar::FindToolForPosition(wxCoord x, wxCoord y) const void wxToolBar::UpdateSize() { - // we must refresh the frame after the toolbar size (possibly) changed + // the toolbar size changed + SendMessage(GetHwnd(), TB_AUTOSIZE, 0, 0); + + // we must also refresh the frame after the toolbar size (possibly) changed wxFrame *frame = wxDynamicCast(GetParent(), wxFrame); if ( frame ) { @@ -804,7 +824,6 @@ void wxToolBar::UpdateSize() (void)::SendMessage(GetHwndOf(frame), WM_SIZE, SIZE_RESTORED, MAKELPARAM(r.right - r.left, r.bottom - r.top)); } - } // ---------------------------------------------------------------------------- @@ -921,7 +940,7 @@ long wxToolBar::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) #define BGR_BUTTONSHADOW (RGB(128,128,128)) // dark grey #define BGR_BUTTONFACE (RGB(192,192,192)) // bright grey #define BGR_BUTTONHILIGHT (RGB(255,255,255)) // white -#define BGR_BACKGROUNDSEL (RGB(255,000,000)) // blue +#define BGR_BACKGROUNDSEL (RGB(000,000,255)) // blue #define BGR_BACKGROUND (RGB(255,000,255)) // magenta void wxMapBitmap(HBITMAP hBitmap, int width, int height)