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:
Julian Smart
2003-07-12 23:09:04 +00:00
parent 1b80d34a52
commit 92f1a59c28
8 changed files with 79 additions and 39 deletions

View File

@@ -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);

View File

@@ -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();

View File

@@ -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();

View File

@@ -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