X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/51c2f7ea41f0e6a2fadef7e20678452eff36affc..364f3b070071ee73e417a3770342d779774288e8:/src/msw/menu.cpp diff --git a/src/msw/menu.cpp b/src/msw/menu.cpp index 24ca3253a2..8798b7d2ce 100644 --- a/src/msw/menu.cpp +++ b/src/msw/menu.cpp @@ -190,9 +190,7 @@ void SetDefaultMenuItem(HMENU WXUNUSED_IN_WINCE(hmenu), UINT WXUNUSED_IN_WINCE(id)) { #ifndef __WXWINCE__ - MENUITEMINFO mii; - wxZeroMemory(mii); - mii.cbSize = sizeof(MENUITEMINFO); + WinStruct mii; mii.fMask = MIIM_STATE; mii.fState = MFS_DEFAULT; @@ -210,9 +208,7 @@ void SetOwnerDrawnMenuItem(HMENU WXUNUSED_IN_WINCE(hmenu), BOOL WXUNUSED_IN_WINCE(byPositon = FALSE)) { #ifndef __WXWINCE__ - MENUITEMINFO mii; - wxZeroMemory(mii); - mii.cbSize = sizeof(MENUITEMINFO); + WinStruct mii; mii.fMask = MIIM_FTYPE | MIIM_DATA; mii.fType = MFT_OWNERDRAW; mii.dwItemData = data; @@ -230,9 +226,7 @@ void SetOwnerDrawnMenuItem(HMENU WXUNUSED_IN_WINCE(hmenu), #ifdef __WXWINCE__ UINT GetMenuState(HMENU hMenu, UINT id, UINT flags) { - MENUITEMINFO info; - wxZeroMemory(info); - info.cbSize = sizeof(info); + WinStruct info; info.fMask = MIIM_STATE; // MF_BYCOMMAND is zero so test MF_BYPOSITION if ( !::GetMenuItemInfo(hMenu, id, flags & MF_BYPOSITION ? TRUE : FALSE , & info) ) @@ -407,7 +401,7 @@ void wxMenu::UpdateAccel(wxMenuItem *item) GetMenuBar()->RebuildAccelTable(); } -#if wxUSE_OWNER_DRAW +#if wxUSE_OWNER_DRAWN ResetMaxAccelWidth(); #endif } @@ -438,7 +432,7 @@ HBITMAP GetHBitmapForMenu(wxMenuItem *pItem, bool checked = true) #if wxUSE_IMAGE if ( wxGetWinVersion() >= wxWinVersion_Vista ) { -#if wxUSE_OWNER_DRAW +#if wxUSE_OWNER_DRAWN wxBitmap bmp = pItem->GetBitmap(checked); if ( bmp.IsOk() ) { @@ -452,7 +446,7 @@ HBITMAP GetHBitmapForMenu(wxMenuItem *pItem, bool checked = true) return GetHbitmapOf(pItem->GetBitmap(checked)); } -#endif // wxUSE_OWNER_DRAW +#endif // wxUSE_OWNER_DRAWN //else: bitmap is not set return NULL; @@ -794,7 +788,7 @@ wxMenuItem *wxMenu::DoRemove(wxMenuItem *item) m_accels.RemoveAt(n); -#if wxUSE_OWNER_DRAW +#if wxUSE_OWNER_DRAWN ResetMaxAccelWidth(); #endif } @@ -913,9 +907,7 @@ void wxMenu::SetTitle(const wxString& label) { // modify the title #ifdef __WXWINCE__ - MENUITEMINFO info; - wxZeroMemory(info); - info.cbSize = sizeof(info); + WinStruct info; info.fMask = MIIM_TYPE; info.fType = MFT_STRING; info.cch = m_title.length(); @@ -939,7 +931,7 @@ void wxMenu::SetTitle(const wxString& label) // put the title string in bold face if ( !m_title.empty() ) { - SetDefaultMenuItem(GetHmenu(), (UINT_PTR)idMenuTitle); + SetDefaultMenuItem(GetHmenu(), (UINT)idMenuTitle); } #endif // Win32 } @@ -980,7 +972,7 @@ bool wxMenu::MSWCommand(WXUINT WXUNUSED(param), WXWORD id_) } // get the menu with given handle (recursively) -#if wxUSE_OWNER_DRAW +#if wxUSE_OWNER_DRAWN wxMenu* wxMenu::MSWGetMenu(WXHMENU hMenu) { // check self @@ -1003,7 +995,7 @@ wxMenu* wxMenu::MSWGetMenu(WXHMENU hMenu) // unknown hMenu return NULL; } -#endif // wxUSE_OWNER_DRAW +#endif // wxUSE_OWNER_DRAWN // --------------------------------------------------------------------------- // Menu Bar @@ -1221,6 +1213,19 @@ void wxMenuBar::EnableTop(size_t pos, bool enable) Refresh(); } +bool wxMenuBar::IsEnabledTop(size_t pos) const +{ + wxCHECK_MSG( pos < GetMenuCount(), false, wxS("invalid menu index") ); + WinStruct mii; + mii.fMask = MIIM_STATE; + if ( !::GetMenuItemInfo(GetHmenu(), pos, TRUE, &mii) ) + { + wxLogLastError(wxS("GetMenuItemInfo(menubar)")); + } + + return !(mii.fState & MFS_GRAYED); +} + void wxMenuBar::SetMenuLabel(size_t pos, const wxString& label) { wxCHECK_RET( pos < GetMenuCount(), wxT("invalid menu index") ); @@ -1256,9 +1261,7 @@ void wxMenuBar::SetMenuLabel(size_t pos, const wxString& label) } #ifdef __WXWINCE__ - MENUITEMINFO info; - wxZeroMemory(info); - info.cbSize = sizeof(info); + WinStruct info; info.fMask = MIIM_TYPE; info.fType = MFT_STRING; info.cch = label.length(); @@ -1593,7 +1596,7 @@ wxMenu* wxMenuBar::MSWGetMenu(WXHMENU hMenu) wxCHECK_MSG( GetHMenu() != hMenu, NULL, wxT("wxMenuBar::MSWGetMenu(): menu handle is wxMenuBar, not wxMenu") ); -#if wxUSE_OWNER_DRAW +#if wxUSE_OWNER_DRAWN // query all menus for ( size_t n = 0 ; n < GetMenuCount(); ++n ) {