UINT WXUNUSED_IN_WINCE(id))
{
#ifndef __WXWINCE__
- MENUITEMINFO mii;
- wxZeroMemory(mii);
- mii.cbSize = sizeof(MENUITEMINFO);
+ WinStruct<MENUITEMINFO> mii;
mii.fMask = MIIM_STATE;
mii.fState = MFS_DEFAULT;
BOOL WXUNUSED_IN_WINCE(byPositon = FALSE))
{
#ifndef __WXWINCE__
- MENUITEMINFO mii;
- wxZeroMemory(mii);
- mii.cbSize = sizeof(MENUITEMINFO);
+ WinStruct<MENUITEMINFO> mii;
mii.fMask = MIIM_FTYPE | MIIM_DATA;
mii.fType = MFT_OWNERDRAW;
mii.dwItemData = data;
#ifdef __WXWINCE__
UINT GetMenuState(HMENU hMenu, UINT id, UINT flags)
{
- MENUITEMINFO info;
- wxZeroMemory(info);
- info.cbSize = sizeof(info);
+ WinStruct<MENUITEMINFO> info;
info.fMask = MIIM_STATE;
// MF_BYCOMMAND is zero so test MF_BYPOSITION
if ( !::GetMenuItemInfo(hMenu, id, flags & MF_BYPOSITION ? TRUE : FALSE , & info) )
GetMenuBar()->RebuildAccelTable();
}
+#if wxUSE_OWNER_DRAWN
ResetMaxAccelWidth();
+#endif
}
//else: it is a separator, they can't have accels, nothing to do
}
#if wxUSE_IMAGE
if ( wxGetWinVersion() >= wxWinVersion_Vista )
{
+#if wxUSE_OWNER_DRAWN
wxBitmap bmp = pItem->GetBitmap(checked);
if ( bmp.IsOk() )
{
return GetHbitmapOf(pItem->GetBitmap(checked));
}
+#endif // wxUSE_OWNER_DRAWN
//else: bitmap is not set
return NULL;
m_accels.RemoveAt(n);
+#if wxUSE_OWNER_DRAWN
ResetMaxAccelWidth();
+#endif
}
//else: this item doesn't have an accel, nothing to do
#endif // wxUSE_ACCEL
{
// modify the title
#ifdef __WXWINCE__
- MENUITEMINFO info;
- wxZeroMemory(info);
- info.cbSize = sizeof(info);
+ WinStruct<MENUITEMINFO> info;
info.fMask = MIIM_TYPE;
info.fType = MFT_STRING;
info.cch = m_title.length();
// put the title string in bold face
if ( !m_title.empty() )
{
- SetDefaultMenuItem(GetHmenu(), (UINT_PTR)idMenuTitle);
+ SetDefaultMenuItem(GetHmenu(), (UINT)idMenuTitle);
}
#endif // Win32
}
// ignore commands from the menu title
if ( id != idMenuTitle )
{
+ // Default value for uncheckable items.
+ int checked = -1;
+
// update the check item when it's clicked
wxMenuItem * const item = FindItem(id);
if ( item && item->IsCheckable() )
+ {
item->Toggle();
- // get the status of the menu item: note that it has been just changed
- // by Toggle() above so here we already get the new state of the item
- //
- // Also notice that we must pass unsigned id_ and not sign-extended id
- // to ::GetMenuState() as this is what it expects.
- UINT menuState = ::GetMenuState(GetHmenu(), id_, MF_BYCOMMAND);
- SendEvent(id, menuState & MF_CHECKED ? 1 : 0);
+ // Get the status of the menu item: note that it has been just changed
+ // by Toggle() above so here we already get the new state of the item.
+ //
+ // Also notice that we must pass unsigned id_ and not sign-extended id
+ // to ::GetMenuState() as this is what it expects.
+ UINT menuState = ::GetMenuState(GetHmenu(), id_, MF_BYCOMMAND);
+ checked = (menuState & MF_CHECKED) != 0;
+ }
+
+ SendEvent(id, checked);
}
return true;
}
// get the menu with given handle (recursively)
+#if wxUSE_OWNER_DRAWN
wxMenu* wxMenu::MSWGetMenu(WXHMENU hMenu)
{
// check self
// unknown hMenu
return NULL;
}
+#endif // wxUSE_OWNER_DRAWN
// ---------------------------------------------------------------------------
// Menu Bar
Refresh();
}
+bool wxMenuBar::IsEnabledTop(size_t pos) const
+{
+ wxCHECK_MSG( pos < GetMenuCount(), false, wxS("invalid menu index") );
+ WinStruct<MENUITEMINFO> 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") );
}
#ifdef __WXWINCE__
- MENUITEMINFO info;
- wxZeroMemory(info);
- info.cbSize = sizeof(info);
+ WinStruct<MENUITEMINFO> info;
info.fMask = MIIM_TYPE;
info.fType = MFT_STRING;
info.cch = label.length();
wxCHECK_MSG( GetHMenu() != hMenu, NULL,
wxT("wxMenuBar::MSWGetMenu(): menu handle is wxMenuBar, not wxMenu") );
+#if wxUSE_OWNER_DRAWN
// query all menus
for ( size_t n = 0 ; n < GetMenuCount(); ++n )
{
if ( menu )
return menu;
}
+#endif
// unknown hMenu
return NULL;