X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/99a7bebb651e9ba427d1211a9855d58d7ae2fbf7..b5d59f11f00a3865641d9c3b8981972f6df67ef3:/src/msw/menu.cpp diff --git a/src/msw/menu.cpp b/src/msw/menu.cpp index 316f1a9ce9..94e9827cdb 100644 --- a/src/msw/menu.cpp +++ b/src/msw/menu.cpp @@ -400,14 +400,14 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos) pos += 2; // for the title itself and its separator BOOL ok = false; - + #if wxUSE_OWNER_DRAWN // Currently, mixing owner-drawn and non-owner-drawn items results in // inconsistent margins, so we force this to be owner-drawn if any other // items already are. Later we might want to use a boolean in the wxMenu // to avoid search. Also we might make this fix unnecessary by getting the correct // margin using NONCLIENTMETRICS. - if ( !pItem->IsOwnerDrawn() ) + if ( !pItem->IsOwnerDrawn() && !pItem->IsSeparator() ) { // Check if any other items are ownerdrawn, and make ownerdrawn if so wxMenuItemList::compatibility_iterator node = GetMenuItems().GetFirst(); @@ -427,12 +427,11 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos) #if wxUSE_OWNER_DRAWN if ( pItem->IsOwnerDrawn() ) { - // is the item owner-drawn just because of the bitmap? - if ( pItem->GetBitmap().Ok() && + // is the item owner-drawn just because of the [checked] bitmap? + if ( (pItem->GetBitmap(false).Ok() || pItem->GetBitmap(true).Ok()) && !pItem->GetTextColour().Ok() && !pItem->GetBackgroundColour().Ok() && - !pItem->GetFont().Ok() && - !pItem->GetBitmap(true).Ok() ) + !pItem->GetFont().Ok() ) { // try to use InsertMenuItem() as it's guaranteed to look correct // while our owner-drawn code is not @@ -445,6 +444,13 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos) if ( wxGetWinVersion() >= wxWinVersion_98 ) { mii.fMask = MIIM_STRING | MIIM_DATA | MIIM_BITMAP; + if ( pItem->IsCheckable() ) + { + // need to set checked/unchecked bitmaps as otherwise our + // MSWOnDrawItem() item is not called + mii.fMask |= MIIM_CHECKMARKS; + } + mii.cch = itemText.length(); mii.dwTypeData = wx_const_cast(wxChar *, itemText.c_str()); @@ -467,6 +473,11 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos) // // so instead draw it ourselves in MSWOnDrawItem() mii.dwItemData = wx_reinterpret_cast(ULONG_PTR, pItem); + if ( pItem->IsCheckable() ) + { + mii.hbmpChecked = + mii.hbmpUnchecked = HBMMENU_CALLBACK; + } mii.hbmpItem = HBMMENU_CALLBACK; ok = ::InsertMenuItem(GetHmenu(), pos, TRUE /* by pos */, &mii);