if ( !m_hMenu )
{
- wxFAIL_MSG( _T("failed to create menu bar") );
+ wxFAIL_MSG( wxT("failed to create menu bar") );
return;
}
}
tx = 0;
}
- int desiredW = tw;
- int desiredH = th;
+ int desiredW,
+ desiredH;
if ( toolbar->IsVertical() )
{
+ desiredW = tw;
desiredH = height;
}
else
{
desiredW = width;
+ desiredH = th;
}
- // use the 'real' MSW position here, don't offset relativly to the
+ // use the 'real' MSW position here, don't offset relatively to the
// client area origin
-
- // Optimise such that we don't have to always resize the toolbar
- // when the frame changes, otherwise we'll get a lot of flicker.
- bool heightChanging wxDUMMY_INITIALIZE(true);
- bool widthChanging wxDUMMY_INITIALIZE(true);
-
- if ( toolbar->IsVertical() )
- {
- // It's OK if the current height is greater than what can be shown.
- heightChanging = (desiredH > th) ;
- widthChanging = (desiredW != tw) ;
-
- // The next time around, we may not have to set the size
- if (heightChanging)
- desiredH = desiredH + 200;
- }
- else
- {
- // It's OK if the current width is greater than what can be shown.
- widthChanging = (desiredW > tw) ;
- heightChanging = (desiredH != th) ;
-
- // The next time around, we may not have to set the size
- if (widthChanging)
- desiredW = desiredW + 200;
- }
-
- if (tx != 0 || ty != 0 || widthChanging || heightChanging)
- toolbar->SetSize(x, y, desiredW, desiredH, wxSIZE_NO_ADJUSTMENTS);
+ toolbar->SetSize(x, y, desiredW, desiredH, wxSIZE_NO_ADJUSTMENTS);
}
#endif // !WINCE_WITH_COMMANDBAR
bool wxFrame::HandleCommand(WXWORD id, WXWORD cmd, WXHWND control)
{
#if wxUSE_MENUS
+
+#if defined(WINCE_WITHOUT_COMMANDBAR)
+ if (GetToolBar() && GetToolBar()->FindById(id))
+ return GetToolBar()->MSWCommand(cmd, id);
+#endif
+
// we only need to handle the menu and accelerator commands from the items
// of our menu bar, base wxWindow class already handles the rest
if ( !control && (cmd == 0 /* menu */ || cmd == 1 /* accel */) )
if ( !wxCurrentPopupMenu )
#endif // wxUSE_MENUS_NATIVE
{
- wxMenuItem * const mitem = MSWFindMenuBarItem(id);
+ wxMenuItem * const mitem = FindItemInMenuBar((signed short)id);
if ( mitem )
return ProcessCommand(mitem);
}
#if wxUSE_MENUS
-wxMenuItem *wxFrame::MSWFindMenuBarItem(WXWORD id)
+bool
+wxFrame::HandleMenuSelect(WXWORD nItem, WXWORD flags, WXHMENU WXUNUSED(hMenu))
{
- wxMenuBar * const mbar = GetMenuBar();
- return mbar ? mbar->FindItem((signed short)id) : NULL;
-}
-
-bool wxFrame::HandleMenuSelect(WXWORD nItem, WXWORD flags, WXHMENU hMenu)
-{
- int item;
- if ( flags == 0xFFFF && hMenu == 0 )
- {
- // menu was removed from screen
- item = -1;
- }
-#ifndef __WXMICROWIN__
- else if ( !(flags & MF_POPUP) && !(flags & MF_SEPARATOR) )
- {
- item = nItem;
- }
-#endif
- else
- {
- // don't give hints for separators (doesn't make sense) nor for the
- // items opening popup menus (they don't have them anyhow) but do clear
- // the status line - otherwise, we would be left with the help message
- // for the previous item which doesn't apply any more
- DoGiveHelp(wxEmptyString, true);
-
- return false;
- }
+ // WM_MENUSELECT is generated for both normal items and menus, including
+ // the top level menus of the menu bar, which can't be represented using
+ // any valid identifier in wxMenuEvent so use -1 for them
+ // the menu highlight events for n
+ const int item = flags & (MF_POPUP | MF_SEPARATOR) ? -1 : nItem;
wxMenuEvent event(wxEVT_MENU_HIGHLIGHT, item);
event.SetEventObject(this);
- return HandleWindowEvent(event);
+ if ( HandleWindowEvent(event) )
+ return true;
+
+ // by default, i.e. if the event wasn't handled above, clear the status bar
+ // text when an item which can't have any associated help string in wx API
+ // is selected
+ if ( item == -1 )
+ DoGiveHelp(wxEmptyString, true);
+
+ return false;
}
bool wxFrame::HandleMenuLoop(const wxEventType& evtType, WXWORD isPopup)