return;
}
- wxCHECK_RET(!pMenuBar->GetFrame(), wxT("this menubar is already attached"));
+ m_frameMenuBar = NULL;
- if (m_frameMenuBar)
- delete m_frameMenuBar;
-
- m_hMenu = pMenuBar->Create();
- m_ulMenubarId = pMenuBar->GetMenubarId();
- if (m_ulMenubarId != FID_MENU)
+ // Can set a menubar several times.
+ // TODO: how to prevent a memory leak if you have a currently-unattached
+ // menubar? wxWindows assumes that the frame will delete the menu (otherwise
+ // there are problems for MDI).
+ if (pMenuBar->GetHMenu())
{
- ::WinSetWindowUShort( m_hMenu
- ,QWS_ID
- ,(unsigned short)m_ulMenubarId
- );
+ m_hMenu = pMenuBar->GetHMenu();
}
+ else
+ {
+ pMenuBar->Detach();
- if (!m_hMenu)
- return;
+ m_hMenu = pMenuBar->Create();
+
+ if (!m_hMenu)
+ return;
+ }
InternalSetMenuBar();
, long ulStyle
)
{
- ULONG ulPmFlags = 0;
- ULONG ulExtraFlags = 0;
- ULONG ulTempFlags = FCF_TITLEBAR |
- FCF_SYSMENU |
- FCF_MINBUTTON |
- FCF_MAXBUTTON |
- FCF_SIZEBORDER |
- FCF_ICON |
- FCF_MENU |
- FCF_ACCELTABLE |
- FCF_SHELLPOSITION |
- FCF_TASKLIST;
+ ULONG ulPmFlags = 0L;
+ ULONG ulExtraFlags = 0L;
+ ULONG ulTempFlags = FCF_STANDARD;
m_hDefaultIcon = (WXHICON) (wxSTD_FRAME_ICON ? wxSTD_FRAME_ICON : wxDEFAULT_FRAME_ICON);
- if ((ulStyle & wxCAPTION) == wxCAPTION)
- ulPmFlags = FCF_TASKLIST;
+ if (ulStyle == wxDEFAULT_FRAME_STYLE)
+ ulPmFlags = FCF_STANDARD;
else
- ulPmFlags = FCF_NOMOVEWITHOWNER;
-
- if (ulStyle & wxMINIMIZE_BOX)
- ulPmFlags |= FCF_MINBUTTON;
- if (ulStyle & wxMAXIMIZE_BOX)
- ulPmFlags |= FCF_MAXBUTTON;
- if (ulStyle & wxTHICK_FRAME)
- ulPmFlags |= FCF_DLGBORDER;
- if (ulStyle & wxSYSTEM_MENU)
- ulPmFlags |= FCF_SYSMENU;
- if ((ulStyle & wxMINIMIZE) || (ulStyle & wxICONIZE))
- ulPmFlags |= WS_MINIMIZED;
- if (ulStyle & wxMAXIMIZE)
- ulPmFlags |= WS_MAXIMIZED;
- if (ulStyle & wxCAPTION)
- ulPmFlags |= FCF_TASKLIST;
- if (ulStyle & wxCLIP_CHILDREN)
{
- // Invalid for frame windows under PM
- }
+ if ((ulStyle & wxCAPTION) == wxCAPTION)
+ ulPmFlags = FCF_TASKLIST;
+ else
+ ulPmFlags = FCF_NOMOVEWITHOWNER;
+
+ if (ulStyle & wxMINIMIZE_BOX)
+ ulPmFlags |= FCF_MINBUTTON;
+ if (ulStyle & wxMAXIMIZE_BOX)
+ ulPmFlags |= FCF_MAXBUTTON;
+ if (ulStyle & wxTHICK_FRAME)
+ ulPmFlags |= FCF_DLGBORDER;
+ if (ulStyle & wxSYSTEM_MENU)
+ ulPmFlags |= FCF_SYSMENU;
+ if ((ulStyle & wxMINIMIZE) || (ulStyle & wxICONIZE))
+ ulPmFlags |= WS_MINIMIZED;
+ if (ulStyle & wxMAXIMIZE)
+ ulPmFlags |= WS_MAXIMIZED;
+ if (ulStyle & wxCAPTION)
+ ulPmFlags |= FCF_TASKLIST;
+ if (ulStyle & wxCLIP_CHILDREN)
+ {
+ // Invalid for frame windows under PM
+ }
- //
- // Keep this in wxFrame because it saves recoding this function
- // in wxTinyFrame
- //
+ //
+ // Keep this in wxFrame because it saves recoding this function
+ // in wxTinyFrame
+ //
#if wxUSE_ITSY_BITSY
- if (ulStyle & wxTINY_CAPTION_VERT)
- ulExtraFlags |= kVertCaption;
- if (ulStyle & wxTINY_CAPTION_HORIZ)
- ulExtraFlags |= kHorzCaption;
+ if (ulStyle & wxTINY_CAPTION_VERT)
+ ulExtraFlags |= kVertCaption;
+ if (ulStyle & wxTINY_CAPTION_HORIZ)
+ ulExtraFlags |= kHorzCaption;
#else
- if (ulStyle & wxTINY_CAPTION_VERT)
- ulPmFlags |= FCF_TASKLIST;
- if (ulStyle & wxTINY_CAPTION_HORIZ)
- ulPmFlags |= FCF_TASKLIST;
+ if (ulStyle & wxTINY_CAPTION_VERT)
+ ulPmFlags |= FCF_TASKLIST;
+ if (ulStyle & wxTINY_CAPTION_HORIZ)
+ ulPmFlags |= FCF_TASKLIST;
#endif
- if ((ulStyle & wxTHICK_FRAME) == 0)
- ulPmFlags |= FCF_BORDER;
- if (ulStyle & wxFRAME_TOOL_WINDOW)
- ulExtraFlags = kFrameToolWindow;
-
- if (ulStyle & wxSTAY_ON_TOP)
- ulPmFlags |= FCF_SYSMODAL;
+ if ((ulStyle & wxTHICK_FRAME) == 0)
+ ulPmFlags |= FCF_BORDER;
+ if (ulStyle & wxFRAME_TOOL_WINDOW)
+ ulExtraFlags = kFrameToolWindow;
- if (ulPmFlags & ulTempFlags)
- ulPmFlags = FCF_STANDARD;
+ if (ulStyle & wxSTAY_ON_TOP)
+ ulPmFlags |= FCF_SYSMODAL;
+ }
//
// Clear the visible flag, we always call show
//