wxMenu and wxMenuBar modifications: now works much better with owner-drawn
items, better encapsulation (the wxMenu data members are no longer public), simplified wxFrame and derived classes by moving the common parts into member functions of wxMenuBar git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2039 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -398,7 +398,7 @@ wxStatusBar* wxFrame::CreateStatusBar(int number, long style, wxWindowID id,
 | 
			
		||||
    const wxString& name)
 | 
			
		||||
{
 | 
			
		||||
  // VZ: calling CreateStatusBar twice is an error - why anyone would do it?
 | 
			
		||||
  wxCHECK_MSG( m_frameStatusBar == NULL, FALSE, 
 | 
			
		||||
  wxCHECK_MSG( m_frameStatusBar == NULL, FALSE,
 | 
			
		||||
               "recreating status bar in wxFrame" );
 | 
			
		||||
 | 
			
		||||
  m_frameStatusBar = OnCreateStatusBar(number, style, id,
 | 
			
		||||
@@ -449,48 +449,29 @@ void wxFrame::PositionStatusBar()
 | 
			
		||||
 | 
			
		||||
void wxFrame::SetMenuBar(wxMenuBar *menu_bar)
 | 
			
		||||
{
 | 
			
		||||
  if (!menu_bar)
 | 
			
		||||
  {
 | 
			
		||||
    m_frameMenuBar = NULL;
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  if (menu_bar->m_menuBarFrame)
 | 
			
		||||
   return;
 | 
			
		||||
    if (!menu_bar)
 | 
			
		||||
    {
 | 
			
		||||
        m_frameMenuBar = NULL;
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  int i;
 | 
			
		||||
  HMENU menu = CreateMenu();
 | 
			
		||||
    wxCHECK_RET( !menu_bar->GetFrame(), "this menubar is already attached" );
 | 
			
		||||
 | 
			
		||||
  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]);
 | 
			
		||||
  }
 | 
			
		||||
    if (m_frameMenuBar)
 | 
			
		||||
        delete m_frameMenuBar;
 | 
			
		||||
 | 
			
		||||
  menu_bar->m_hMenu = (WXHMENU)menu;
 | 
			
		||||
  if (m_frameMenuBar)
 | 
			
		||||
    delete m_frameMenuBar;
 | 
			
		||||
    m_hMenu = menu_bar->Create();
 | 
			
		||||
 | 
			
		||||
  this->m_hMenu = (WXHMENU) menu;
 | 
			
		||||
    if ( !m_hMenu )
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
  DWORD err = 0;
 | 
			
		||||
  if (!SetMenu((HWND) GetHWND(), menu))
 | 
			
		||||
  {
 | 
			
		||||
#ifdef __WIN32__
 | 
			
		||||
    err = GetLastError();
 | 
			
		||||
#endif
 | 
			
		||||
  }
 | 
			
		||||
    if ( !::SetMenu((HWND)GetHWND(), (HMENU)m_hMenu) )
 | 
			
		||||
    {
 | 
			
		||||
        wxLogLastError("SetMenu");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  m_frameMenuBar = menu_bar;
 | 
			
		||||
  menu_bar->m_menuBarFrame = this;
 | 
			
		||||
    m_frameMenuBar = menu_bar;
 | 
			
		||||
    menu_bar->Attach(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
@@ -650,10 +631,10 @@ bool wxFrame::MSWOnPaint()
 | 
			
		||||
      // Hold a pointer to the dc so long as the OnPaint() message
 | 
			
		||||
      // is being processed
 | 
			
		||||
      HDC cdc = BeginPaint((HWND) GetHWND(), &ps);
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
      // Erase background before painting or we get white background
 | 
			
		||||
      this->MSWDefWindowProc(WM_ICONERASEBKGND,(WORD)(LONG) ps.hdc,0L);
 | 
			
		||||
      
 | 
			
		||||
 | 
			
		||||
      if (the_icon)
 | 
			
		||||
      {
 | 
			
		||||
        RECT rect;
 | 
			
		||||
@@ -798,7 +779,7 @@ bool wxFrame::MSWTranslateMessage(WXMSG* pMsg)
 | 
			
		||||
  if (m_acceleratorTable.Ok() &&
 | 
			
		||||
          ::TranslateAccelerator((HWND) GetHWND(), (HACCEL) m_acceleratorTable.GetHACCEL(), (MSG *)pMsg))
 | 
			
		||||
    return TRUE;
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -820,7 +801,7 @@ void wxFrame::OnSize(wxSizeEvent& event)
 | 
			
		||||
  {
 | 
			
		||||
    wxWindow *win = (wxWindow *)node->Data();
 | 
			
		||||
    if ( !win->IsKindOf(CLASSINFO(wxFrame))  &&
 | 
			
		||||
         !win->IsKindOf(CLASSINFO(wxDialog)) && 
 | 
			
		||||
         !win->IsKindOf(CLASSINFO(wxDialog)) &&
 | 
			
		||||
         (win != GetStatusBar()) &&
 | 
			
		||||
         (win != GetToolBar()) )
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user