X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d2aef3124b711987f45c0f789994a05877fac7ba..a6b0bd49c72e577a218bfe10fc1526cf2ad6293d:/src/msw/frame.cpp diff --git a/src/msw/frame.cpp b/src/msw/frame.cpp index 1a7f2bb7a6..8f1e6f9db3 100644 --- a/src/msw/frame.cpp +++ b/src/msw/frame.cpp @@ -40,7 +40,7 @@ #undef LoadAccelerators #endif -#if USE_NATIVE_STATUSBAR +#if wxUSE_NATIVE_STATUSBAR #include #endif @@ -62,7 +62,7 @@ END_EVENT_TABLE() IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow) #endif -#if USE_NATIVE_STATUSBAR +#if wxUSE_NATIVE_STATUSBAR bool wxFrame::m_useNativeStatusBar = TRUE; #else bool wxFrame::m_useNativeStatusBar = FALSE; @@ -331,6 +331,12 @@ bool wxFrame::IsIconized(void) const return m_iconized; } +// Is it maximized? +bool wxFrame::IsMaximized(void) const +{ + return (::IsZoomed((HWND) GetHWND()) != 0) ; +} + void wxFrame::SetTitle(const wxString& title) { SetWindowText((HWND) GetHWND(), (const char *)title); @@ -352,17 +358,12 @@ void wxFrame::SetIcon(const wxIcon& icon) #endif } -void wxFrame::SetAcceleratorTable(const wxAcceleratorTable& accel) -{ - m_acceleratorTable = accel; -} - wxStatusBar *wxFrame::OnCreateStatusBar(int number, long style, wxWindowID id, const wxString& name) { wxStatusBar *statusBar = NULL; -#if USE_NATIVE_STATUSBAR +#if wxUSE_NATIVE_STATUSBAR if (UsesNativeStatusBar()) { statusBar = new wxStatusBar95(this, id, style); @@ -375,7 +376,7 @@ wxStatusBar *wxFrame::OnCreateStatusBar(int number, long style, wxWindowID id, // Set the height according to the font and the border size wxClientDC dc(statusBar); - dc.SetFont(* statusBar->GetFont()); + dc.SetFont(statusBar->GetFont()); long x, y; dc.GetTextExtent("X", &x, &y); @@ -426,7 +427,7 @@ void wxFrame::PositionStatusBar(void) { // native status bar positions itself if (m_frameStatusBar -#if USE_NATIVE_STATUSBAR +#if wxUSE_NATIVE_STATUSBAR && !m_frameStatusBar->IsKindOf(CLASSINFO(wxStatusBar95)) #endif ) @@ -513,7 +514,7 @@ bool wxFrame::LoadAccelerators(const wxString& table) void wxFrame::Fit(void) { // Work out max. size - wxNode *node = GetChildren()->First(); + wxNode *node = GetChildren().First(); int max_width = 0; int max_height = 0; while (node) @@ -549,7 +550,7 @@ void wxFrame::OnSysColourChanged(wxSysColourChangedEvent& event) { wxSysColourChangedEvent event2; event2.SetEventObject( m_frameStatusBar ); - m_frameStatusBar->ProcessEvent(event2); + m_frameStatusBar->GetEventHandler()->ProcessEvent(event2); } // Propagate the event to the non-top-level children @@ -595,7 +596,7 @@ void wxFrame::MSWCreate(int id, wxWindow *parent, const char *wclass, wxWindow * // Keep this in wxFrame because it saves recoding this function // in wxTinyFrame -#if USE_ITSY_BITSY +#if wxUSE_ITSY_BITSY if (style & wxTINY_CAPTION_VERT) msflags |= IBS_VERTCAPTION; if (style & wxTINY_CAPTION_HORIZ) @@ -611,6 +612,11 @@ void wxFrame::MSWCreate(int id, wxWindow *parent, const char *wclass, wxWindow * WXDWORD extendedStyle = MakeExtendedStyle(style); +#ifndef __WIN16__ + if (style & wxFRAME_TOOL_WINDOW) + extendedStyle |= WS_EX_TOOLWINDOW; +#endif + if (style & wxSTAY_ON_TOP) extendedStyle |= WS_EX_TOPMOST; @@ -625,18 +631,15 @@ void wxFrame::MSWCreate(int id, wxWindow *parent, const char *wclass, wxWindow * bool wxFrame::MSWOnPaint(void) { -#if WXDEBUG > 1 - wxDebugMsg("wxFrameWnd::OnPaint %d\n", handle); -#endif RECT rect; if (GetUpdateRect((HWND) GetHWND(), &rect, FALSE)) { if (m_iconized) { HICON the_icon; - if (m_icon.Ok()) - the_icon = (HICON) m_icon.GetHICON(); - if (the_icon == 0) + if (m_icon.Ok()) + the_icon = (HICON) m_icon.GetHICON(); + else the_icon = (HICON) m_defaultIcon; PAINTSTRUCT ps; @@ -682,12 +685,15 @@ WXHICON wxFrame::MSWOnQueryDragIcon(void) void wxFrame::MSWOnSize(int x, int y, WXUINT id) { -#if WXDEBUG > 1 - wxDebugMsg("wxFrameWnd::OnSize %d\n", m_hWnd); -#endif switch (id) { case SIZENORMAL: + // only do it it if we were iconized before, otherwise resizing the + // parent frame has a curious side effect of bringing it under it's + // children + if ( !m_iconized ) + break; + // restore all child frames too IconizeChildFrames(FALSE); @@ -695,20 +701,20 @@ void wxFrame::MSWOnSize(int x, int y, WXUINT id) case SIZEFULLSCREEN: m_iconized = FALSE; - break; + break; case SIZEICONIC: // iconize all child frames too IconizeChildFrames(TRUE); m_iconized = TRUE; - break; + break; } if (!m_iconized) { // forward WM_SIZE to status bar control -#if USE_NATIVE_STATUSBAR +#if wxUSE_NATIVE_STATUSBAR if (m_frameStatusBar && m_frameStatusBar->IsKindOf(CLASSINFO(wxStatusBar95))) { wxSizeEvent event(wxSize(x, y), m_frameStatusBar->GetId()); @@ -730,17 +736,11 @@ void wxFrame::MSWOnSize(int x, int y, WXUINT id) bool wxFrame::MSWOnClose(void) { -#if WXDEBUG > 1 - wxDebugMsg("wxFrameWnd::OnClose %d\n", handle); -#endif return Close(); } bool wxFrame::MSWOnCommand(WXWORD id, WXWORD cmd, WXHWND control) { -#if WXDEBUG > 1 - wxDebugMsg("wxFrameWnd::OnCommand %d\n", handle); -#endif if (cmd == 0 || cmd == 1 ) // Can be either a menu command or an accelerator. { // In case it's e.g. a toolbar. @@ -803,7 +803,7 @@ bool wxFrame::MSWTranslateMessage(WXMSG* pMsg) void wxFrame::OnSize(wxSizeEvent& event) { // if we're using constraints - do use them - #if USE_CONSTRAINTS + #if wxUSE_CONSTRAINTS if ( GetAutoLayout() ) { Layout(); return; @@ -812,7 +812,7 @@ void wxFrame::OnSize(wxSizeEvent& event) // do we have _exactly_ one child? wxWindow *child = NULL; - for ( wxNode *node = GetChildren()->First(); node; node = node->Next() ) + for ( wxNode *node = GetChildren().First(); node; node = node->Next() ) { wxWindow *win = (wxWindow *)node->Data(); if ( !win->IsKindOf(CLASSINFO(wxFrame)) && @@ -842,16 +842,13 @@ void wxFrame::OnSize(wxSizeEvent& event) // subwindow found. void wxFrame::OnActivate(wxActivateEvent& event) { - for(wxNode *node = GetChildren()->First(); node; node = node->Next()) + for(wxNode *node = GetChildren().First(); node; node = node->Next()) { // Find a child that's a subwindow, but not a dialog box. wxWindow *child = (wxWindow *)node->Data(); if (!child->IsKindOf(CLASSINFO(wxFrame)) && !child->IsKindOf(CLASSINFO(wxDialog))) { -#if WXDEBUG > 1 - wxDebugMsg("wxFrame::OnActivate: about to set the child's focus.\n"); -#endif child->SetFocus(); return; } @@ -868,6 +865,8 @@ void wxFrame::OnCloseWindow(wxCloseEvent& event) { this->Destroy(); } + else + event.Veto(TRUE); } bool wxFrame::OnClose(void) @@ -932,7 +931,7 @@ void wxFrame::Command(int id) void wxFrame::ProcessCommand(int id) { - wxCommandEvent commandEvent(wxEVENT_TYPE_MENU_COMMAND, id); + wxCommandEvent commandEvent(wxEVT_COMMAND_MENU_SELECTED, id); commandEvent.SetInt( id ); commandEvent.SetEventObject( this ); @@ -969,6 +968,30 @@ wxPoint wxFrame::GetClientAreaOrigin() const return pt; } +void wxFrame::ScreenToClient(int *x, int *y) const +{ + wxWindow::ScreenToClient(x, y); + + // We may be faking the client origin. + // So a window that's really at (0, 30) may appear + // (to wxWin apps) to be at (0, 0). + wxPoint pt(GetClientAreaOrigin()); + *x -= pt.x; + *y -= pt.y; +} + +void wxFrame::ClientToScreen(int *x, int *y) const +{ + // We may be faking the client origin. + // So a window that's really at (0, 30) may appear + // (to wxWin apps) to be at (0, 0). + wxPoint pt1(GetClientAreaOrigin()); + *x += pt1.x; + *y += pt1.y; + + wxWindow::ClientToScreen(x, y); +} + wxToolBar* wxFrame::CreateToolBar(long style, wxWindowID id, const wxString& name) { wxCHECK_MSG( m_frameToolBar == NULL, FALSE, @@ -1025,8 +1048,7 @@ void wxFrame::PositionToolBar(void) // propagate our state change to all child frames void wxFrame::IconizeChildFrames(bool bIconize) { - wxWindow *child = NULL; - for ( wxNode *node = GetChildren()->First(); node; node = node->Next() ) { + for ( wxNode *node = GetChildren().First(); node; node = node->Next() ) { wxWindow *win = (wxWindow *)node->Data(); if ( win->IsKindOf(CLASSINFO(wxFrame)) ) { ((wxFrame *)win)->Iconize(bIconize);