Fix handling of menu items checked before being attached in wxMSW.

Calling wxMenuItem::Check() before appending the item to a menu didn't have
any effect, fix this by checking the item state when actually attaching it.

Closes #15748.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@75448 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2013-12-29 00:01:38 +00:00
parent 32dc4cc8db
commit 2d3a1aab74

View File

@ -526,6 +526,13 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
checkInitially = true;
}
// Also handle the case of check menu items that had been checked before
// being attached to the menu: we don't need to actually call Check() on
// them, so we don't use checkInitially in this case, but we do need to
// make them checked at Windows level too.
if ( pItem->IsCheck() && pItem->IsChecked() )
flags |= MF_CHECKED;
// adjust position to account for the title of a popup menu, if any
if ( !GetMenuBar() && !m_title.empty() )
pos += 2; // for the title itself and its separator
@ -611,6 +618,12 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
mii.wID = id;
}
if ( flags & MF_CHECKED )
{
mii.fMask |= MIIM_STATE;
mii.fState = MFS_CHECKED;
}
mii.dwItemData = reinterpret_cast<ULONG_PTR>(pItem);
ok = ::InsertMenuItem(GetHmenu(), pos, TRUE /* by pos */, &mii);