Ownerdrawn menu updates

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9550 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Webster
2001-03-20 05:46:07 +00:00
parent 7b67fc42f9
commit 45bedfdd73
3 changed files with 124 additions and 37 deletions

View File

@@ -265,6 +265,7 @@ bool wxMenu::DoInsertOrAppend(
{
ERRORID vError;
wxString sError;
char zMsg[128];
#if wxUSE_ACCEL
UpdateAccel(pItem);
#endif // wxUSE_ACCEL
@@ -325,12 +326,14 @@ bool wxMenu::DoInsertOrAppend(
{
//
// Want to get {Measure|Draw}Item messages?
// item draws itself, pass pointer to it in data parameter
// item draws itself, passing pointer to data doesn't work in OS/2
// Will eventually need to set the image handle somewhere into vItem.hItem
//
rItem.afStyle |= MIS_OWNERDRAW;
pData = (BYTE*)pItem;
// vItem.hItem = ????
rItem.hItem = (HBITMAP)pItem->GetBitmap().GetHBITMAP();
pItem->m_vMenuData.afStyle = rItem.afStyle;
pItem->m_vMenuData.hItem = rItem.hItem;
}
else
#endif
@@ -358,6 +361,21 @@ bool wxMenu::DoInsertOrAppend(
,(MPARAM)&rItem
,(MPARAM)pData
);
#if wxUSE_OWNER_DRAWN
if (pItem->IsOwnerDrawn())
{
BOOL rc;
MENUITEM vMenuItem;
::WinSendMsg( GetHmenu()
,MM_QUERYITEM
,MPFROM2SHORT( (USHORT)pItem->GetId()
,(USHORT)(FALSE)
)
,&vMenuItem
);
}
#endif
if (rc == MIT_MEMERROR || rc == MIT_ERROR)
{
vError = ::WinGetLastError(vHabmain);
@@ -618,6 +636,42 @@ wxWindow* wxMenu::GetWindow() const
return NULL;
} // end of wxMenu::GetWindow
// recursive search for item by id
wxMenuItem* wxMenu::FindItem(
int nItemId
, ULONG hItem
, wxMenu** ppItemMenu
) const
{
if ( ppItemMenu )
*ppItemMenu = NULL;
wxMenuItem* pItem = NULL;
for ( wxMenuItemList::Node *node = m_items.GetFirst();
node && !pItem;
node = node->GetNext() )
{
pItem = node->GetData();
if ( pItem->GetId() == nItemId && pItem->m_vMenuData.hItem == hItem)
{
if ( ppItemMenu )
*ppItemMenu = (wxMenu *)this;
}
else if ( pItem->IsSubMenu() )
{
pItem = pItem->GetSubMenu()->FindItem(nItemId, hItem, ppItemMenu);
}
else
{
// don't exit the loop
pItem = NULL;
}
}
return pItem;
} // end of wxMenu::FindItem
// ---------------------------------------------------------------------------
// Menu Bar
// ---------------------------------------------------------------------------
@@ -1090,4 +1144,25 @@ wxMenuItem* wxMenuBar::FindItem(
return pItem;
} // end of wxMenuBar::FindItem
wxMenuItem* wxMenuBar::FindItem(
int nId
, ULONG hItem
, wxMenu** ppItemMenu
) const
{
if (ppItemMenu)
*ppItemMenu = NULL;
wxMenuItem* pItem = NULL;
size_t nCount = GetMenuCount();
for (size_t i = 0; !pItem && (i < nCount); i++)
{
pItem = m_menus[i]->FindItem( nId
,hItem
,ppItemMenu
);
}
return pItem;
} // end of wxMenuBar::FindItem