Use WM_INITMENUPOPUP
Added wxMenu member to wxMenuEvent git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@21930 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -256,10 +256,10 @@ void wxFrameBase::OnInternalIdle()
|
||||
#endif
|
||||
}
|
||||
|
||||
void wxFrameBase::OnMenuOpen(wxMenuEvent& WXUNUSED(event))
|
||||
void wxFrameBase::OnMenuOpen(wxMenuEvent& event)
|
||||
{
|
||||
#if wxUSE_MENUS && !wxUSE_IDLEMENUUPDATES
|
||||
DoMenuUpdates();
|
||||
DoMenuUpdates(event.GetMenu());
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -421,13 +421,15 @@ wxToolBar* wxFrameBase::OnCreateToolBar(long style,
|
||||
#if wxUSE_MENUS
|
||||
|
||||
// update all menus
|
||||
void wxFrameBase::DoMenuUpdates()
|
||||
void wxFrameBase::DoMenuUpdates(wxMenu* menu)
|
||||
{
|
||||
wxEvtHandler* source = GetEventHandler();
|
||||
wxMenuBar* bar = GetMenuBar();
|
||||
|
||||
if ( bar != NULL )
|
||||
if (menu)
|
||||
menu->UpdateUI(source);
|
||||
else if ( bar != NULL )
|
||||
{
|
||||
wxEvtHandler* source = GetEventHandler();
|
||||
int nCount = bar->GetMenuCount();
|
||||
for (int n = 0; n < nCount; n++)
|
||||
bar->GetMenu(n)->UpdateUI(source);
|
||||
|
@@ -169,7 +169,7 @@ static void gtk_menu_open_callback( GtkWidget *widget, wxMenu *menu )
|
||||
{
|
||||
if (g_isIdle) wxapp_install_idle_handler();
|
||||
|
||||
wxMenuEvent event( wxEVT_MENU_OPEN, -1 );
|
||||
wxMenuEvent event( wxEVT_MENU_OPEN, -1, menu );
|
||||
event.SetEventObject( menu );
|
||||
|
||||
wxEvtHandler* handler = menu->GetEventHandler();
|
||||
|
@@ -169,7 +169,7 @@ static void gtk_menu_open_callback( GtkWidget *widget, wxMenu *menu )
|
||||
{
|
||||
if (g_isIdle) wxapp_install_idle_handler();
|
||||
|
||||
wxMenuEvent event( wxEVT_MENU_OPEN, -1 );
|
||||
wxMenuEvent event( wxEVT_MENU_OPEN, -1, menu );
|
||||
event.SetEventObject( menu );
|
||||
|
||||
wxEvtHandler* handler = menu->GetEventHandler();
|
||||
|
@@ -141,11 +141,7 @@ wxFrame::~wxFrame()
|
||||
m_isBeingDeleted = TRUE;
|
||||
DeleteAllBars();
|
||||
#ifdef __WXWINCE__
|
||||
if (m_commandBar)
|
||||
{
|
||||
::DestroyWindow((HWND) m_commandBar);
|
||||
m_commandBar = NULL;
|
||||
}
|
||||
RemoveCommandBar();
|
||||
#endif
|
||||
|
||||
}
|
||||
@@ -300,16 +296,9 @@ void wxFrame::InternalSetMenuBar()
|
||||
#ifdef __WXMICROWIN__
|
||||
// Nothing
|
||||
#elif defined(__WXWINCE__)
|
||||
if (!m_commandBar)
|
||||
{
|
||||
// TODO: eventually have a wxCommandBar class
|
||||
m_commandBar = (WXHWND) CommandBar_Create(wxGetInstance(), GetHwnd(), NewControlId());
|
||||
if (!m_commandBar)
|
||||
{
|
||||
wxFAIL_MSG( _T("failed to create commandbar") );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
CreateCommandBar() ;
|
||||
|
||||
if (m_commandBar)
|
||||
{
|
||||
if (!CommandBar_InsertMenubarEx((HWND) m_commandBar, NULL,
|
||||
@@ -802,6 +791,10 @@ long wxFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
|
||||
processed = HandlePaint();
|
||||
break;
|
||||
|
||||
case WM_INITMENUPOPUP:
|
||||
processed = HandleInitMenuPopup((WXHMENU) wParam);
|
||||
break;
|
||||
|
||||
#if !defined(__WXMICROWIN__) && !defined(__WXWINCE__)
|
||||
case WM_MENUSELECT:
|
||||
{
|
||||
@@ -813,10 +806,6 @@ long wxFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_INITMENU:
|
||||
processed = HandleInitMenu();
|
||||
break;
|
||||
|
||||
case WM_EXITMENULOOP:
|
||||
processed = HandleMenuLoop(wxEVT_MENU_CLOSE, wParam);
|
||||
break;
|
||||
@@ -839,13 +828,52 @@ long wxFrame::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
|
||||
return rc;
|
||||
}
|
||||
|
||||
// handle WM_INITMENU message
|
||||
bool wxFrame::HandleInitMenu()
|
||||
// handle WM_INITMENUPOPUP message
|
||||
bool wxFrame::HandleInitMenuPopup(WXHMENU hMenu)
|
||||
{
|
||||
wxMenuEvent event(wxEVT_MENU_OPEN, 0);
|
||||
wxMenu* menu = NULL;
|
||||
if (GetMenuBar())
|
||||
{
|
||||
int nCount = GetMenuBar()->GetMenuCount();
|
||||
for (int n = 0; n < nCount; n++)
|
||||
{
|
||||
if (GetMenuBar()->GetMenu(n)->GetHMenu() == hMenu)
|
||||
{
|
||||
menu = GetMenuBar()->GetMenu(n);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
wxMenuEvent event(wxEVT_MENU_OPEN, 0, menu);
|
||||
event.SetEventObject(this);
|
||||
|
||||
return GetEventHandler()->ProcessEvent(event);
|
||||
}
|
||||
|
||||
#ifdef __WXWINCE__
|
||||
WXHWND wxFrame::CreateCommandBar()
|
||||
{
|
||||
if (m_commandBar)
|
||||
return m_commandBar;
|
||||
|
||||
m_commandBar = (WXHWND) CommandBar_Create(wxGetInstance(), GetHwnd(), NewControlId());
|
||||
if (!m_commandBar)
|
||||
{
|
||||
wxFAIL_MSG( _T("failed to create commandbar") );
|
||||
return 0;
|
||||
}
|
||||
return m_commandBar;
|
||||
}
|
||||
|
||||
void wxFrame::RemoveCommandBar()
|
||||
{
|
||||
if (m_commandBar)
|
||||
{
|
||||
::DestroyWindow((HWND) m_commandBar);
|
||||
m_commandBar = NULL;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user