// ----------------------------------------------------------------------------
// the (popup) menu title has this special id
-static const int idMenuTitle = -3;
+static const UINT idMenuTitle = (UINT)-3;
// ----------------------------------------------------------------------------
// private functions
// 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
flags |= MF_POPUP;
}
else {
- id = pItem->GetId();
+ id = pItem->GetMSWId();
}
// if we just appended the title, highlight it
- if ( (int)id == idMenuTitle )
+ if ( id == idMenuTitle )
{
// visually select the menu title
SetDefaultMenuItem(GetHmenu(), id);
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"));
#else
if ( !ModifyMenu(hMenu, 0u,
MF_BYPOSITION | MF_STRING,
- (unsigned)idMenuTitle, m_title.wx_str()) )
+ idMenuTitle, m_title.wx_str()) )
{
wxLogLastError(wxT("ModifyMenu"));
}
// put the title string in bold face
if ( !m_title.empty() )
{
- SetDefaultMenuItem(GetHmenu(), (UINT)idMenuTitle);
+ SetDefaultMenuItem(GetHmenu(), idMenuTitle);
}
#endif // Win32
}
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);