#include "wx/statusbr.h"
#include "wx/toolbar.h"
#include "wx/menuitem.h"
+#include "wx/log.h"
#ifdef LoadAccelerators
#undef LoadAccelerators
// we pass NULL as parent to MSWCreate because frames with parents behave
// very strangely under Win95 shell
- MSWCreate(m_windowId, NULL, wxFrameClassName, this, title,
+ // Alteration by JACS: keep normal Windows behaviour (float on top of parent)
+ // with this style.
+ if ((m_windowStyle & wxFRAME_FLOAT_ON_PARENT) == 0)
+ parent = NULL;
+
+ MSWCreate(m_windowId, parent, wxFrameClassName, this, title,
x, y, width, height, style);
wxModelessWindows.Append(this);
void wxFrame::GetClientSize(int *x, int *y) const
{
RECT rect;
- GetClientRect((HWND) GetHWND(), &rect);
+ ::GetClientRect((HWND) GetHWND(), &rect);
if ( GetStatusBar() )
{
HWND hWnd = (HWND) GetHWND();
RECT rect;
- GetClientRect(hWnd, &rect);
+ ::GetClientRect(hWnd, &rect);
RECT rect2;
GetWindowRect(hWnd, &rect2);
const wxString& name)
{
// VZ: calling CreateStatusBar twice is an error - why anyone would do it?
- wxCHECK_MSG( m_frameStatusBar == NULL, FALSE,
+ wxCHECK_MSG( m_frameStatusBar == NULL, FALSE,
"recreating status bar in wxFrame" );
m_frameStatusBar = OnCreateStatusBar(number, style, id,
void wxFrame::SetMenuBar(wxMenuBar *menu_bar)
{
- if (!menu_bar)
- {
- m_frameMenuBar = NULL;
- return;
- }
-
- if (menu_bar->m_menuBarFrame)
- return;
+ if (!menu_bar)
+ {
+ m_frameMenuBar = NULL;
+ return;
+ }
- int i;
- HMENU menu = CreateMenu();
+ wxCHECK_RET( !menu_bar->GetFrame(), "this menubar is already attached" );
- for (i = 0; i < menu_bar->m_menuCount; i ++)
- {
- HMENU popup = (HMENU)menu_bar->m_menus[i]->m_hMenu;
- //
- // After looking Bounds Checker result, it seems that all
- // menus must be individually destroyed. So, don't reset m_hMenu,
- // to allow ~wxMenu to do the job.
- //
- menu_bar->m_menus[i]->m_savehMenu = (WXHMENU) popup;
- // Uncommenting for the moment... JACS
- menu_bar->m_menus[i]->m_hMenu = 0;
- AppendMenu(menu, MF_POPUP | MF_STRING, (UINT)popup, menu_bar->m_titles[i]);
- }
+ if (m_frameMenuBar)
+ delete m_frameMenuBar;
- menu_bar->m_hMenu = (WXHMENU)menu;
- if (m_frameMenuBar)
- delete m_frameMenuBar;
+ m_hMenu = menu_bar->Create();
- this->m_hMenu = (WXHMENU) menu;
+ if ( !m_hMenu )
+ return;
- DWORD err = 0;
- if (!SetMenu((HWND) GetHWND(), menu))
- {
-#ifdef __WIN32__
- err = GetLastError();
-#endif
- }
+ if ( !::SetMenu((HWND)GetHWND(), (HMENU)m_hMenu) )
+ {
+ wxLogLastError("SetMenu");
+ }
- m_frameMenuBar = menu_bar;
- menu_bar->m_menuBarFrame = this;
+ m_frameMenuBar = menu_bar;
+ menu_bar->Attach(this);
}
#if 0
// Hold a pointer to the dc so long as the OnPaint() message
// is being processed
HDC cdc = BeginPaint((HWND) GetHWND(), &ps);
-
+
// Erase background before painting or we get white background
this->MSWDefWindowProc(WM_ICONERASEBKGND,(WORD)(LONG) ps.hdc,0L);
-
+
if (the_icon)
{
RECT rect;
- GetClientRect((HWND) GetHWND(), &rect);
+ ::GetClientRect((HWND) GetHWND(), &rect);
int icon_width = 32;
int icon_height = 32;
int icon_x = (int)((rect.right - icon_width)/2);
return FALSE;
}
else
- return FALSE;
+ return wxWindow::MSWOnCommand(id, cmd, control);
}
void wxFrame::MSWOnMenuHighlight(WXWORD nItem, WXWORD nFlags, WXHMENU hSysMenu)
event.SetEventObject( this );
GetEventHandler()->ProcessEvent(event);
}
- else if (nFlags != MF_SEPARATOR)
+ else if ((nFlags != MF_SEPARATOR) && (nItem != 0) && (nItem != 65535))
{
wxMenuEvent event(wxEVT_MENU_HIGHLIGHT, nItem);
event.SetEventObject( this );
if (m_acceleratorTable.Ok() &&
::TranslateAccelerator((HWND) GetHWND(), (HACCEL) m_acceleratorTable.GetHACCEL(), (MSG *)pMsg))
return TRUE;
-
+
return FALSE;
}
{
wxWindow *win = (wxWindow *)node->Data();
if ( !win->IsKindOf(CLASSINFO(wxFrame)) &&
- !win->IsKindOf(CLASSINFO(wxDialog)) &&
+ !win->IsKindOf(CLASSINFO(wxDialog)) &&
(win != GetStatusBar()) &&
(win != GetToolBar()) )
{
{
if (GetStatusBar())
{
- if (event.GetMenuId() == -1)
- SetStatusText("");
- else
+ int menuId = event.GetMenuId();
+ if ( menuId != -1 )
{
wxMenuBar *menuBar = GetMenuBar();
- if (menuBar)
+ if (menuBar && menuBar->FindItem(menuId))
{
-// #ifndef __SALFORDC__
- int menuId = event.GetMenuId();
- wxString helpString;
- // This causes a spurious access violation with Salford C++
- helpString = menuBar->GetHelpString(menuId);
- if (helpString != "")
- SetStatusText(helpString);
-// #endif
+ // set status text even if the string is empty - this will at
+ // least remove the string from the item which was previously
+ // selected
+ SetStatusText(menuBar->GetHelpString(menuId));
}
}
}
{
bar->Check(id,!bar->Checked(id)) ;
}
- GetEventHandler()->ProcessEvent(commandEvent);
+
+/*
+ // Process events starting with the window with the focus, if any.
+ wxWindow* focusWin = wxFindFocusDescendant(this);
+
+ wxEvtHandler* evtHandler = focusWin ? focusWin->GetEventHandler() : GetEventHandler();
+*/
+
+ wxEvtHandler* evtHandler = GetEventHandler();
+ evtHandler->ProcessEvent(commandEvent);
}
// Checks if there is a toolbar, and returns the first free client position