X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9c80e160ec04e899c9de98549cec45582949d071..129b8b1a215fc1fcc1b9f06daa0aeaf22bbce614:/src/msw/menu.cpp diff --git a/src/msw/menu.cpp b/src/msw/menu.cpp index 94e9827cdb..5e24fd40b9 100644 --- a/src/msw/menu.cpp +++ b/src/msw/menu.cpp @@ -59,7 +59,25 @@ // other standard headers #include -#if wxUSE_OWNER_DRAWN && defined(MIIM_BITMAP) +//VC6 needs these defining, though they are in winuser.h +#ifndef MIIM_BITMAP +#define MIIM_STRING 0x00000040 +#define MIIM_BITMAP 0x00000080 +#define MIIM_FTYPE 0x00000100 +#define HBMMENU_CALLBACK ((HBITMAP) -1) +typedef struct tagMENUINFO +{ + DWORD cbSize; + DWORD fMask; + DWORD dwStyle; + UINT cyMax; + HBRUSH hbrBack; + DWORD dwContextHelpID; + DWORD dwMenuData; +} MENUINFO, FAR *LPMENUINFO; +#endif + +#if wxUSE_OWNER_DRAWN #include "wx/dynlib.h" #endif @@ -435,12 +453,10 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos) { // try to use InsertMenuItem() as it's guaranteed to look correct // while our owner-drawn code is not - - // first compile-time check -#if defined(MIIM_BITMAP) && (_WIN32_WINNT >= 0x0500) +#ifndef __DMC__ + // DMC at march 2007 doesn't have HBITMAP hbmpItem tagMENUITEMINFOA /W + // MIIM_BITMAP only works under WinME/2000+ WinStruct mii; - - // now run-time one: MIIM_BITMAP only works under WinME/2000+ if ( wxGetWinVersion() >= wxWinVersion_98 ) { mii.fMask = MIIM_STRING | MIIM_DATA | MIIM_BITMAP; @@ -452,7 +468,7 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos) } mii.cch = itemText.length(); - mii.dwTypeData = wx_const_cast(wxChar *, itemText.c_str()); + mii.dwTypeData = wx_const_cast(wxChar *, itemText.wx_str()); if (flags & MF_POPUP) { @@ -512,7 +528,7 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos) pItem->ResetOwnerDrawn(); } } -#endif // MIIM_BITMAP +#endif // __DMC__ } if ( !ok ) @@ -532,7 +548,7 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos) itemText = wxMenuItem::GetLabelFromText(itemText); #endif - pData = (wxChar*)itemText.c_str(); + pData = (wxChar*)itemText.wx_str(); } // item might have already been inserted by InsertMenuItem() above @@ -777,10 +793,15 @@ bool wxMenu::MSWCommand(WXUINT WXUNUSED(param), WXWORD id) // ignore commands from the menu title if ( id != (WXWORD)idMenuTitle ) { - // get the checked status of the command: notice that menuState is the - // old state of the menu, so the test for MF_CHECKED must be inverted + // 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 UINT menuState = ::GetMenuState(GetHmenu(), id, MF_BYCOMMAND); - SendEvent(id, !(menuState & MF_CHECKED)); + SendEvent(id, menuState & MF_CHECKED); } return true;