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:
@@ -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
|
||||
|
||||
|
Reference in New Issue
Block a user