X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cfdcfeafbe4a7ab0794eac54e4806cee4f78472a..9d5507f7a2701395e1d5c121bd877bb9066ee6ea:/src/msw/menu.cpp?ds=sidebyside diff --git a/src/msw/menu.cpp b/src/msw/menu.cpp index 27ccbc0fb8..4c4383e467 100644 --- a/src/msw/menu.cpp +++ b/src/msw/menu.cpp @@ -97,7 +97,7 @@ typedef struct tagMENUINFO // ---------------------------------------------------------------------------- // the (popup) menu title has this special id -static const int idMenuTitle = -3; +static const UINT idMenuTitle = (UINT)-3; // ---------------------------------------------------------------------------- // private functions @@ -261,9 +261,15 @@ void wxMenu::Init() // The wxWindow destructor will take care of deleting the submenus. wxMenu::~wxMenu() { - if ( !::DestroyMenu(GetHmenu()) ) + // we should free Windows resources only if Windows doesn't do it for us + // which happens if we're attached to a menubar or a submenu of another + // menu + if ( !IsAttached() && !GetParent() ) { - wxLogLastError(wxT("DestroyMenu")); + if ( !::DestroyMenu(GetHmenu()) ) + { + wxLogLastError(wxT("DestroyMenu")); + } } #if wxUSE_ACCEL @@ -393,7 +399,7 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos) flags |= MF_POPUP; } else { - id = pItem->GetId(); + id = pItem->GetMSWId(); } @@ -558,7 +564,7 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos) // if we just appended the title, highlight it - if ( (int)id == idMenuTitle ) + if ( id == idMenuTitle ) { // visually select the menu title SetDefaultMenuItem(GetHmenu(), id); @@ -725,7 +731,7 @@ void wxMenu::SetTitle(const wxString& label) if ( !label.empty() ) { if ( !::InsertMenu(hMenu, 0u, MF_BYPOSITION | MF_STRING, - (unsigned)idMenuTitle, m_title.wx_str()) || + idMenuTitle, m_title.wx_str()) || !::InsertMenu(hMenu, 1u, MF_BYPOSITION, (unsigned)-1, NULL) ) { wxLogLastError(wxT("InsertMenu")); @@ -761,7 +767,7 @@ void wxMenu::SetTitle(const wxString& label) #else if ( !ModifyMenu(hMenu, 0u, MF_BYPOSITION | MF_STRING, - (unsigned)idMenuTitle, m_title.wx_str()) ) + idMenuTitle, m_title.wx_str()) ) { wxLogLastError(wxT("ModifyMenu")); } @@ -773,7 +779,7 @@ void wxMenu::SetTitle(const wxString& label) // put the title string in bold face if ( !m_title.empty() ) { - SetDefaultMenuItem(GetHmenu(), (UINT)idMenuTitle); + SetDefaultMenuItem(GetHmenu(), idMenuTitle); } #endif // Win32 } @@ -874,8 +880,9 @@ wxMenuBar::~wxMenuBar() toolMenuBar->SetMenuBar(NULL); } #else - - if ( m_hMenu ) + // we should free Windows resources only if Windows doesn't do it for us + // which happens if we're attached to a frame + if (m_hMenu && !IsAttached()) { #if defined(WINCE_WITH_COMMANDBAR) ::DestroyWindow((HWND) m_commandBar);