- for (i = 0; i < menu_bar->m_menuCount; i ++)
- {
- HMENU popup = (HMENU)menu_bar->m_menus[i]->m_hMenu;
- //
- // After looking Bounds Checker result, it seems that all
- // menus must be individually destroyed. So, don't reset m_hMenu,
- // to allow ~wxMenu to do the job.
- //
- menu_bar->m_menus[i]->m_savehMenu = (WXHMENU) popup;
- // Uncommenting for the moment... JACS
- menu_bar->m_menus[i]->m_hMenu = 0;
- AppendMenu(menu, MF_POPUP | MF_STRING, (UINT)popup, menu_bar->m_titles[i]);
- }
-
- menu_bar->m_hMenu = (WXHMENU)menu;
- if (m_frameMenuBar)
- delete m_frameMenuBar;
-
- this->m_hMenu = (WXHMENU) menu;
-
- DWORD err = 0;
- if (!SetMenu((HWND) GetHWND(), menu))
- {
-#ifdef __WIN32__
- err = GetLastError();
-#endif
- }
-
- m_frameMenuBar = menu_bar;
- menu_bar->m_menuBarFrame = this;
-}
-
-bool wxFrame::LoadAccelerators(const wxString& table)
-{
- m_acceleratorTable = (WXHANDLE)
-#ifdef __WIN32__
-#ifdef UNICODE
- ::LoadAcceleratorsW(wxGetInstance(), (const char *)table);
-#else
- ::LoadAcceleratorsA(wxGetInstance(), (const char *)table);
-#endif
-#else
- ::LoadAccelerators(wxGetInstance(), (const char *)table);
-#endif
-
- // The above is necessary because LoadAccelerators is a macro
- // which we have undefed earlier in the file to avoid confusion
- // with wxFrame::LoadAccelerators. Ugh!
-
- return (m_acceleratorTable != (WXHANDLE) NULL);
+ if ( !menubar )
+ {
+ // actually remove the menu from the frame
+ m_hMenu = (WXHMENU)0;
+ InternalSetMenuBar();
+ }
+ else // set new non NULL menu bar
+ {
+ // Can set a menubar several times.
+ if ( menubar->GetHMenu() )
+ {
+ m_hMenu = menubar->GetHMenu();
+ }
+ else // no HMENU yet
+ {
+ m_hMenu = menubar->Create();
+
+ if ( !m_hMenu )
+ {
+ wxFAIL_MSG( _T("failed to create menu bar") );
+ return;
+ }
+ }
+
+ InternalSetMenuBar();
+ }