const wxMenuInfoList& wxMenuBar::GetMenuInfos() const { wxMenuInfoList* list = const_cast< wxMenuInfoList* >( &m_menuInfos ) ; WX_CLEAR_LIST( wxMenuInfoList , *list ) ; for( size_t i = 0 ; i < GetMenuCount() ; ++i ) { wxMenuInfo* info = new wxMenuInfo() ; info->Create( const_cast<wxMenuBar*>(this)->GetMenu(i) , GetLabelTop(i) ) ; list->Append( info ) ; } return m_menuInfos ; }
int wxMenuBarBase::FindMenuItem(const wxString& menu, const wxString& item) const { wxString label = wxMenuItem::GetLabelFromText(menu); int i = 0; wxMenuList::compatibility_iterator node; for ( node = m_menus.GetFirst(); node; node = node->GetNext(), i++ ) { if ( label == wxMenuItem::GetLabelFromText(GetLabelTop(i)) ) return node->GetData()->FindItem(item); } return wxNOT_FOUND; }
int wxMenuBarBase::FindMenu(const wxString& title) const { wxString label = wxMenuItem::GetLabelFromText(title); size_t count = GetMenuCount(); for ( size_t i = 0; i < count; i++ ) { wxString title2 = GetLabelTop(i); if ( (title2 == title) || (wxMenuItem::GetLabelFromText(title2) == label) ) { // found return (int)i; } } return wxNOT_FOUND; }
WXHMENU wxMenuBar::Create() { // Note: this totally doesn't work on Smartphone, // since you have to use resources. // We'll have to find another way to add a menu // by changing/adding menu items to an existing menu. #if defined(WINCE_WITHOUT_COMMANDBAR) if ( m_hMenu != 0 ) return m_hMenu; if (!GetToolBar()) return 0; HWND hCommandBar = (HWND) GetToolBar()->GetHWND(); HMENU hMenu = (HMENU)::SendMessage(hCommandBar, SHCMBM_GETMENU, (WPARAM)0, (LPARAM)0); if (hMenu) { TBBUTTON tbButton; memset(&tbButton, 0, sizeof(TBBUTTON)); tbButton.iBitmap = I_IMAGENONE; tbButton.fsState = TBSTATE_ENABLED; tbButton.fsStyle = TBSTYLE_DROPDOWN | TBSTYLE_NO_DROPDOWN_ARROW | TBSTYLE_AUTOSIZE; size_t i; for (i = 0; i < GetMenuCount(); i++) { HMENU hPopupMenu = (HMENU) GetMenu(i)->GetHMenu() ; tbButton.dwData = (DWORD)hPopupMenu; wxString label = wxStripMenuCodes(GetLabelTop(i)); tbButton.iString = (int) label.c_str(); int position = i; tbButton.idCommand = NewControlId(); if (!::SendMessage(hCommandBar, TB_INSERTBUTTON, position, (LPARAM)&tbButton)) { wxLogLastError(wxT("TB_INSERTBUTTON")); } } } m_hMenu = (WXHMENU) hMenu; return m_hMenu; #else if ( m_hMenu != 0 ) return m_hMenu; m_hMenu = (WXHMENU)::CreateMenu(); if ( !m_hMenu ) { wxLogLastError(wxT("CreateMenu")); } else { size_t count = GetMenuCount(), i; wxMenuList::iterator it; for ( i = 0, it = m_menus.begin(); i < count; i++, it++ ) { if ( !::AppendMenu((HMENU)m_hMenu, MF_POPUP | MF_STRING, (UINT)(*it)->GetHMenu(), m_titles[i]) ) { wxLogLastError(wxT("AppendMenu")); } } } return m_hMenu; #endif }