reverted wrong change of rev 1.129 and fixed the first part of bug 1422217 in a better way by using InsertMenuItem() correctly for checkable items
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44192 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -427,12 +427,11 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
|
|||||||
#if wxUSE_OWNER_DRAWN
|
#if wxUSE_OWNER_DRAWN
|
||||||
if ( pItem->IsOwnerDrawn() )
|
if ( pItem->IsOwnerDrawn() )
|
||||||
{
|
{
|
||||||
// is the item owner-drawn just because of the bitmap?
|
// is the item owner-drawn just because of the [checked] bitmap?
|
||||||
if ( pItem->GetBitmap().Ok() &&
|
if ( (pItem->GetBitmap(false).Ok() || pItem->GetBitmap(true).Ok()) &&
|
||||||
!pItem->GetTextColour().Ok() &&
|
!pItem->GetTextColour().Ok() &&
|
||||||
!pItem->GetBackgroundColour().Ok() &&
|
!pItem->GetBackgroundColour().Ok() &&
|
||||||
!pItem->GetFont().Ok() &&
|
!pItem->GetFont().Ok() )
|
||||||
!pItem->GetBitmap(true).Ok() )
|
|
||||||
{
|
{
|
||||||
// try to use InsertMenuItem() as it's guaranteed to look correct
|
// try to use InsertMenuItem() as it's guaranteed to look correct
|
||||||
// while our owner-drawn code is not
|
// while our owner-drawn code is not
|
||||||
@@ -445,6 +444,13 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
|
|||||||
if ( wxGetWinVersion() >= wxWinVersion_98 )
|
if ( wxGetWinVersion() >= wxWinVersion_98 )
|
||||||
{
|
{
|
||||||
mii.fMask = MIIM_STRING | MIIM_DATA | MIIM_BITMAP;
|
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.cch = itemText.length();
|
||||||
mii.dwTypeData = wx_const_cast(wxChar *, itemText.c_str());
|
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()
|
// so instead draw it ourselves in MSWOnDrawItem()
|
||||||
mii.dwItemData = wx_reinterpret_cast(ULONG_PTR, pItem);
|
mii.dwItemData = wx_reinterpret_cast(ULONG_PTR, pItem);
|
||||||
|
if ( pItem->IsCheckable() )
|
||||||
|
{
|
||||||
|
mii.hbmpChecked =
|
||||||
|
mii.hbmpUnchecked = HBMMENU_CALLBACK;
|
||||||
|
}
|
||||||
mii.hbmpItem = HBMMENU_CALLBACK;
|
mii.hbmpItem = HBMMENU_CALLBACK;
|
||||||
|
|
||||||
ok = ::InsertMenuItem(GetHmenu(), pos, TRUE /* by pos */, &mii);
|
ok = ::InsertMenuItem(GetHmenu(), pos, TRUE /* by pos */, &mii);
|
||||||
|
Reference in New Issue
Block a user