Fix changing labels of menu items with bitmaps in wxMSW.

We need to call SetMenuItemInfo() from wxMenuItem::SetItemLabel() even for the
owner-drawn items, otherwise their width is not recomputed.

Closes #3897.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73400 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2013-01-20 02:09:39 +00:00
parent 71b619d7f4
commit f1a062a1fa
2 changed files with 21 additions and 14 deletions

View File

@@ -626,6 +626,7 @@ wxMSW:
- Don't send any events from wxSpinCtrl::SetRange() even if the value changed.
- Display system drag images during drag and drop if available (PeterO).
- Fix setting initial wxSpinCtrl value outside 0..100 range (joim).
- Fix changing labels of menu items with bitmaps (Daniel Hyams).
wxOSX/Cocoa:

View File

@@ -681,15 +681,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<MENUITEMINFO> info;
@@ -712,11 +703,26 @@ void wxMenuItem::SetItemLabel(const wxString& txt)
return;
}
if ( isLaterThanWin95 )
info.fMask |= MIIM_STRING;
//else: MIIM_TYPE already specified
info.dwTypeData = wxMSW_CONV_LPTSTR(m_text);
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"));