X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/906c935a80b10d53cecf57f71ab5f3f4f1d529ec..1c2704fe7b25f8f0b1f92b33280adc3c63d2dcab:/src/msw/menuitem.cpp diff --git a/src/msw/menuitem.cpp b/src/msw/menuitem.cpp index 94d963d4ac..de808b31e0 100644 --- a/src/msw/menuitem.cpp +++ b/src/msw/menuitem.cpp @@ -4,7 +4,6 @@ // Author: Vadim Zeitlin // Modified by: // Created: 11.11.97 -// RCS-ID: $Id$ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -681,15 +680,6 @@ void wxMenuItem::SetItemLabel(const wxString& txt) if ( !hMenu || ::GetMenuState(hMenu, id, MF_BYCOMMAND) == (UINT)-1 ) return; -#if wxUSE_OWNER_DRAWN - if ( IsOwnerDrawn() ) - { - // we don't need to do anything for owner drawn items, they will redraw - // themselves using the new text the next time they're displayed - return; - } -#endif // owner drawn - // update the text of the native menu item WinStruct info; @@ -712,11 +702,26 @@ void wxMenuItem::SetItemLabel(const wxString& txt) return; } - if ( isLaterThanWin95 ) - info.fMask |= MIIM_STRING; - //else: MIIM_TYPE already specified - info.dwTypeData = (LPTSTR)m_text.wx_str(); - info.cch = m_text.length(); +#if wxUSE_OWNER_DRAWN + // Don't set the text for the owner drawn items, they don't use it and even + // though setting it doesn't seem to actually do any harm under Windows 7, + // avoid doing this relatively nonsensical operation just in case it does + // break something on other, past or future, Windows versions. + // + // Notice that we do need to call SetMenuItemInfo() even for the ownerdrawn + // items however as otherwise their size wouldn't be recalculated as + // WM_MEASUREITEM wouldn't be sent and this could result in display + // problems if the length of the menu item changed significantly. + if ( !IsOwnerDrawn() ) +#endif // wxUSE_OWNER_DRAWN + { + if ( isLaterThanWin95 ) + info.fMask |= MIIM_STRING; + //else: MIIM_TYPE already specified + info.dwTypeData = wxMSW_CONV_LPTSTR(m_text); + info.cch = m_text.length(); + } + if ( !::SetMenuItemInfo(hMenu, id, FALSE, &info) ) { wxLogLastError(wxT("SetMenuItemInfo")); @@ -975,7 +980,7 @@ bool wxMenuItem::OnDrawItem(wxDC& dc, const wxRect& rc, int x = rcText.left; int y = rcText.top + (rcText.bottom - rcText.top - textSize.cy) / 2; - ::DrawState(hdc, NULL, NULL, (LPARAM)text.wx_str(), + ::DrawState(hdc, NULL, NULL, wxMSW_CONV_LPARAM(text), text.length(), x, y, 0, 0, flags); // ::SetTextAlign(hdc, TA_RIGHT) doesn't work with DSS_DISABLED or DSS_MONO @@ -1005,7 +1010,7 @@ bool wxMenuItem::OnDrawItem(wxDC& dc, const wxRect& rc, int y = rcText.top + (rcText.bottom - rcText.top - accelSize.cy) / 2; - ::DrawState(hdc, NULL, NULL, (LPARAM)accel.wx_str(), + ::DrawState(hdc, NULL, NULL, wxMSW_CONV_LPARAM(accel), accel.length(), x, y, 0, 0, flags); } } @@ -1072,9 +1077,6 @@ bool wxMenuItem::OnDrawItem(wxDC& dc, const wxRect& rc, int nBmpWidth = bmp.GetWidth(), nBmpHeight = bmp.GetHeight(); - // there should be enough space! - wxASSERT( nBmpWidth <= imgWidth && nBmpHeight <= (rcImg.bottom - rcImg.top) ); - int x = rcImg.left + (imgWidth - nBmpWidth) / 2; int y = rcImg.top + (rcImg.bottom - rcImg.top - nBmpHeight) / 2; dc.Blit(x, y, nBmpWidth, nBmpHeight, &dcMem, 0, 0, wxCOPY, true);