X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/82e5f91bffab96d859244bdc2f53b7c6163d0b40..bf6c0db6243368ee239563a1151156beb5b848fa:/src/univ/winuniv.cpp diff --git a/src/univ/winuniv.cpp b/src/univ/winuniv.cpp index f3bb6be5c0..631b7e8800 100644 --- a/src/univ/winuniv.cpp +++ b/src/univ/winuniv.cpp @@ -1,12 +1,12 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: univ/window.cpp +// Name: src/univ/window.cpp // Purpose: implementation of extra wxWindow methods for wxUniv port // Author: Vadim Zeitlin // Modified by: // Created: 06.08.00 // RCS-ID: $Id$ // Copyright: (c) 2000 SciTech Software, Inc. (www.scitechsoft.com) -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // =========================================================================== @@ -17,10 +17,6 @@ // headers // --------------------------------------------------------------------------- -#ifdef __GNUG__ - #pragma implementation "univwindow.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -28,18 +24,19 @@ #pragma hdrstop #endif +#include "wx/window.h" + #ifndef WX_PRECOMP #include "wx/app.h" - #include "wx/window.h" #include "wx/dcclient.h" #include "wx/dcmemory.h" #include "wx/event.h" #include "wx/scrolbar.h" #include "wx/menu.h" #include "wx/frame.h" + #include "wx/log.h" #endif // WX_PRECOMP -#include "wx/log.h" #include "wx/univ/colschem.h" #include "wx/univ/renderer.h" #include "wx/univ/theme.h" @@ -74,6 +71,8 @@ IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowGTK) #elif defined(__WXMGL__) IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowMGL) +#elif defined(__WXDFB__) + IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowDFB) #elif defined(__WXX11__) IMPLEMENT_DYNAMIC_CLASS(wxWindow, wxWindowX11) #elif defined(__WXPM__) @@ -103,15 +102,17 @@ END_EVENT_TABLE() void wxWindow::Init() { +#if wxUSE_SCROLLBAR m_scrollbarVert = m_scrollbarHorz = (wxScrollBar *)NULL; +#endif // wxUSE_SCROLLBAR - m_isCurrent = FALSE; + m_isCurrent = false; m_renderer = wxTheme::Get()->GetRenderer(); - m_oldSize.x = -1; - m_oldSize.y = -1; + m_oldSize.x = wxDefaultCoord; + m_oldSize.y = wxDefaultCoord; } bool wxWindow::Create(wxWindow *parent, @@ -121,33 +122,80 @@ bool wxWindow::Create(wxWindow *parent, long style, const wxString& name) { + long actualStyle = style; + + // FIXME: may need this on other platforms +#ifdef __WXMSW__ + actualStyle &= ~wxVSCROLL; + actualStyle &= ~wxHSCROLL; +#endif + // we add wxCLIP_CHILDREN to get the same ("natural") behaviour under MSW // as under the other platforms if ( !wxWindowNative::Create(parent, id, pos, size, - style | wxCLIP_CHILDREN, + actualStyle | wxCLIP_CHILDREN, name) ) { - return FALSE; + return false; } - // if we should always have the scrollbar, do show it - if ( GetWindowStyle() & wxALWAYS_SHOW_SB ) + // Set full style again, including those we didn't want present + // when calling the base window Create(). + wxWindowBase::SetWindowStyleFlag(style); + + // if we allow or should always have a vertical scrollbar, make it + if ( style & wxVSCROLL || style & wxALWAYS_SHOW_SB ) { #if wxUSE_TWO_WINDOWS - SetInsertIntoMain( TRUE ); + SetInsertIntoMain( true ); #endif - m_scrollbarVert = new wxScrollBar(this, -1, +#if wxUSE_SCROLLBAR + m_scrollbarVert = new wxScrollBar(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSB_VERTICAL); +#endif // wxUSE_SCROLLBAR #if wxUSE_TWO_WINDOWS - SetInsertIntoMain( FALSE ); + SetInsertIntoMain( false ); #endif + } + + // if we should allow a horizontal scrollbar, make it + if ( style & wxHSCROLL ) + { +#if wxUSE_TWO_WINDOWS + SetInsertIntoMain( true ); +#endif +#if wxUSE_SCROLLBAR + m_scrollbarHorz = new wxScrollBar(this, wxID_ANY, + wxDefaultPosition, wxDefaultSize, + wxSB_HORIZONTAL); +#endif // wxUSE_SCROLLBAR +#if wxUSE_TWO_WINDOWS + SetInsertIntoMain( false ); +#endif + } - // and position it +#if wxUSE_SCROLLBAR + if (m_scrollbarHorz || m_scrollbarVert) + { + // position it/them PositionScrollbars(); } +#endif // wxUSE_SCROLLBAR - return TRUE; + return true; +} + +wxWindow::~wxWindow() +{ + m_isBeingDeleted = true; + + // we have to destroy our children before we're destroyed because our + // children suppose that we're of type wxWindow, not just wxWindowNative, + // and so bad things may happen if they're deleted from the base class dtor + // as by then we're not a wxWindow any longer and wxUniv-specific virtual + // functions can't be called + DestroyChildren(); } // ---------------------------------------------------------------------------- @@ -182,18 +230,14 @@ const wxBitmap& wxWindow::GetBackgroundBitmap(int *alignment, // ---------------------------------------------------------------------------- // the event handlers executed when the window must be repainted -void wxWindow::OnNcPaint(wxPaintEvent& event) +void wxWindow::OnNcPaint(wxNcPaintEvent& WXUNUSED(event)) { if ( m_renderer ) { // get the window rect - wxRect rect; - wxSize size = GetSize(); - rect.x = - rect.y = 0; - rect.width = size.x; - rect.height = size.y; + wxRect rect(GetSize()); +#if wxUSE_SCROLLBAR // if the scrollbars are outside the border, we must adjust the rect to // exclude them if ( !m_renderer->AreScrollbarsInsideBorder() ) @@ -206,6 +250,7 @@ void wxWindow::OnNcPaint(wxPaintEvent& event) if ( scrollbar ) rect.height -= scrollbar->GetSize().y; } +#endif // wxUSE_SCROLLBAR // get the DC and draw the border on it wxWindowDC dc(this); @@ -243,6 +288,7 @@ void wxWindow::OnErase(wxEraseEvent& event) DoDrawBackground(*event.GetDC()); +#if wxUSE_SCROLLBAR // if we have both scrollbars, we also have a square in the corner between // them which we must paint if ( m_scrollbarVert && m_scrollbarHorz ) @@ -262,6 +308,7 @@ void wxWindow::OnErase(wxEraseEvent& event) m_renderer->DrawScrollCorner(*event.GetDC(), rectCorner); } } +#endif // wxUSE_SCROLLBAR } bool wxWindow::DoDrawBackground(wxDC& dc) @@ -275,7 +322,7 @@ bool wxWindow::DoDrawBackground(wxDC& dc) rect.height = size.y; wxWindow * const parent = GetParent(); - if ( HasTransparentBackground() && parent && parent->ProvidesBackground() ) + if ( HasTransparentBackground() && parent ) { wxASSERT( !IsTopLevel() ); @@ -302,11 +349,11 @@ bool wxWindow::DoDrawBackground(wxDC& dc) } else { - // Draw background ouselves + // Draw background ourselves EraseBackground( dc, rect ); } - return TRUE; + return true; } void wxWindow::EraseBackground(wxDC& dc, const wxRect& rect) @@ -340,41 +387,43 @@ void wxWindow::DoDrawBorder(wxDC& dc, const wxRect& rect) } } -void wxWindow::DoDraw(wxControlRenderer *renderer) +void wxWindow::DoDraw(wxControlRenderer * WXUNUSED(renderer)) { } -void wxWindow::Refresh(bool eraseBackground, const wxRect *rectClient) +void wxWindow::Refresh(bool eraseBackground, const wxRect *rect) { - wxRect rectWin; - wxPoint pt = GetClientAreaOrigin(); + wxRect rectClient; // the same rectangle in client coordinates + wxPoint origin = GetClientAreaOrigin(); wxSize size = GetClientSize(); - if ( rectClient ) + if ( rect ) { - rectWin = *rectClient; + // the rectangle passed as argument is in client coordinates + rectClient = *rect; // don't refresh anything beyond the client area (scrollbars for // example) - if ( rectWin.GetRight() > size.x ) - rectWin.SetRight(size.x); - if ( rectWin.GetBottom() > size.y ) - rectWin.SetBottom(size.y); + if ( rectClient.GetRight() > size.x ) + rectClient.SetRight(size.x); + if ( rectClient.GetBottom() > size.y ) + rectClient.SetBottom(size.y); - rectWin.Offset(pt); } else // refresh the entire client area { - rectWin.x = pt.x; - rectWin.y = pt.y; - rectWin.width = size.x; - rectWin.height = size.y; + // x,y is already set to 0 by default + rectClient.SetSize(size); } + // convert refresh rectangle to window coordinates: + wxRect rectWin(rectClient); + rectWin.Offset(origin); + // debugging helper #ifdef WXDEBUG_REFRESH - static bool s_refreshDebug = FALSE; + static bool s_refreshDebug = false; if ( s_refreshDebug ) { wxWindowDC dc(this); @@ -393,16 +442,30 @@ void wxWindow::Refresh(bool eraseBackground, const wxRect *rectClient) wxWindowNative::Refresh(eraseBackground, &rectWin); // Refresh all sub controls if any. - wxWindowList::Node *node = GetChildren().GetFirst(); - while ( node ) + wxWindowList& children = GetChildren(); + for ( wxWindowList::iterator i = children.begin(); i != children.end(); ++i ) { - wxWindow *win = node->GetData(); - // Only refresh sub controls when it is visible - // and when it is in the update region. - if(win->IsShown() && wxRegion(rectWin).Contains(win->GetRect()) != wxOutRegion) - win->Refresh(eraseBackground, &rectWin); - - node = node->GetNext(); + wxWindow *child = *i; + // only refresh subcontrols if they are visible: + if ( child->IsTopLevel() || !child->IsShown() || child->IsFrozen() ) + continue; + + // ...and when the subcontrols are in the update region: + wxRect childrect(child->GetRect()); + childrect.Intersect(rectClient); + if ( childrect.IsEmpty() ) + continue; + + // refresh the subcontrol now: + childrect.Offset(-child->GetPosition()); + // NB: We must call wxWindowNative version because we need to refresh + // the entire control, not just its client area, and this is why we + // don't account for child client area origin here neither. Also + // note that we don't pass eraseBackground to the child, but use + // true instead: this is because we can't be sure that + // eraseBackground=false is safe for children as well and not only + // for the parent. + child->wxWindowNative::Refresh(eraseBackground, &childrect); } } @@ -413,7 +476,7 @@ void wxWindow::Refresh(bool eraseBackground, const wxRect *rectClient) bool wxWindow::Enable(bool enable) { if ( !wxWindowNative::Enable(enable) ) - return FALSE; + return false; // disabled window can't keep focus if ( FindFocus() == this && GetParent() != NULL ) @@ -428,23 +491,22 @@ bool wxWindow::Enable(bool enable) Refresh(); } - return TRUE; + return true; } bool wxWindow::IsFocused() const { - wxWindow *self = wxConstCast(this, wxWindow); - return self->FindFocus() == self; + return FindFocus() == this; } bool wxWindow::IsPressed() const { - return FALSE; + return false; } bool wxWindow::IsDefault() const { - return FALSE; + return false; } bool wxWindow::IsCurrent() const @@ -455,14 +517,14 @@ bool wxWindow::IsCurrent() const bool wxWindow::SetCurrent(bool doit) { if ( doit == m_isCurrent ) - return FALSE; + return false; m_isCurrent = doit; if ( CanBeHighlighted() ) Refresh(); - return TRUE; + return true; } int wxWindow::GetStateFlags() const @@ -496,22 +558,24 @@ void wxWindow::OnSize(wxSizeEvent& event) { event.Skip(); +#if wxUSE_SCROLLBAR if ( m_scrollbarVert || m_scrollbarHorz ) { PositionScrollbars(); } +#endif // wxUSE_SCROLLBAR #if 0 // ndef __WXMSW__ // Refresh the area (strip) previously occupied by the border - if (HasFlag( wxNO_FULL_REPAINT_ON_RESIZE ) && IsShown()) + if ( !HasFlag(wxFULL_REPAINT_ON_RESIZE) && IsShown() ) { // This code assumes that wxSizeEvent.GetSize() returns // the area of the entire window, not just the client // area. wxSize newSize = event.GetSize(); - if (m_oldSize.x == -1 && m_oldSize.y == -1) + if (m_oldSize.x == wxDefaultCoord && m_oldSize.y == wxDefaultCoord) { m_oldSize = newSize; return; @@ -526,7 +590,7 @@ void wxWindow::OnSize(wxSizeEvent& event) rect.width = m_oldSize.x; rect.y = m_oldSize.y-2; rect.height = 1; - Refresh( TRUE, &rect ); + Refresh( true, &rect ); } else if (newSize.y < m_oldSize.y) { @@ -535,7 +599,7 @@ void wxWindow::OnSize(wxSizeEvent& event) rect.x = 0; rect.height = 1; rect.width = newSize.x; - wxWindowNative::Refresh( TRUE, &rect ); + wxWindowNative::Refresh( true, &rect ); } if (newSize.x > m_oldSize.x) @@ -545,7 +609,7 @@ void wxWindow::OnSize(wxSizeEvent& event) rect.height = m_oldSize.y; rect.x = m_oldSize.x-2; rect.width = 1; - Refresh( TRUE, &rect ); + Refresh( true, &rect ); } else if (newSize.x < m_oldSize.x) { @@ -554,7 +618,7 @@ void wxWindow::OnSize(wxSizeEvent& event) rect.y = 0; rect.width = 1; rect.height = newSize.y; - wxWindowNative::Refresh( TRUE, &rect ); + wxWindowNative::Refresh( true, &rect ); } } else @@ -567,7 +631,7 @@ void wxWindow::OnSize(wxSizeEvent& event) rect.width = m_oldSize.x; rect.y = m_oldSize.y-4; rect.height = 2; - Refresh( TRUE, &rect ); + Refresh( true, &rect ); } else if (newSize.y < m_oldSize.y) { @@ -576,7 +640,7 @@ void wxWindow::OnSize(wxSizeEvent& event) rect.x = 0; rect.height = 2; rect.width = newSize.x; - wxWindowNative::Refresh( TRUE, &rect ); + wxWindowNative::Refresh( true, &rect ); } if (newSize.x > m_oldSize.x) @@ -586,7 +650,7 @@ void wxWindow::OnSize(wxSizeEvent& event) rect.height = m_oldSize.y; rect.x = m_oldSize.x-4; rect.width = 2; - Refresh( TRUE, &rect ); + Refresh( true, &rect ); } else if (newSize.x < m_oldSize.x) { @@ -595,7 +659,7 @@ void wxWindow::OnSize(wxSizeEvent& event) rect.y = 0; rect.width = 2; rect.height = newSize.y; - wxWindowNative::Refresh( TRUE, &rect ); + wxWindowNative::Refresh( true, &rect ); } } @@ -660,13 +724,19 @@ void wxWindow::DoGetClientSize(int *width, int *height) const if ( width ) { +#if wxUSE_SCROLLBAR // in any case, take account of the scrollbar if ( m_scrollbarVert ) w -= m_scrollbarVert->GetSize().x; +#endif // wxUSE_SCROLLBAR // if we don't have scrollbar or if it is outside the border (and not // blended into it), take account of the right border as well - if ( !m_scrollbarVert || inside ) + if ( +#if wxUSE_SCROLLBAR + !m_scrollbarVert || +#endif // wxUSE_SCROLLBAR + inside ) w -= rectBorder.width; // and always account for the left border @@ -679,10 +749,16 @@ void wxWindow::DoGetClientSize(int *width, int *height) const if ( height ) { +#if wxUSE_SCROLLBAR if ( m_scrollbarHorz ) h -= m_scrollbarHorz->GetSize().y; +#endif // wxUSE_SCROLLBAR - if ( !m_scrollbarHorz || inside ) + if ( +#if wxUSE_SCROLLBAR + !m_scrollbarHorz || +#endif // wxUSE_SCROLLBAR + inside ) h -= rectBorder.height; *height = h - rectBorder.y; @@ -705,14 +781,26 @@ void wxWindow::DoSetClientSize(int width, int height) // had been called before) bool inside = m_renderer->AreScrollbarsInsideBorder(); wxSize size = GetSize(); +#if wxUSE_SCROLLBAR if ( m_scrollbarVert ) width += size.x - m_scrollbarVert->GetPosition().x; - if ( !m_scrollbarVert || inside ) +#endif // wxUSE_SCROLLBAR + if ( +#if wxUSE_SCROLLBAR + !m_scrollbarVert || +#endif // wxUSE_SCROLLBAR + inside ) width += rectBorder.width; +#if wxUSE_SCROLLBAR if ( m_scrollbarHorz ) height += size.y - m_scrollbarHorz->GetPosition().y; - if ( !m_scrollbarHorz || inside ) +#endif // wxUSE_SCROLLBAR + if ( +#if wxUSE_SCROLLBAR + !m_scrollbarHorz || +#endif // wxUSE_SCROLLBAR + inside ) height += rectBorder.height; wxWindowNative::DoSetClientSize(width, height); @@ -721,6 +809,8 @@ void wxWindow::DoSetClientSize(int width, int height) wxHitTest wxWindow::DoHitTest(wxCoord x, wxCoord y) const { wxHitTest ht = wxWindowNative::DoHitTest(x, y); + +#if wxUSE_SCROLLBAR if ( ht == wxHT_WINDOW_INSIDE ) { if ( m_scrollbarVert && x >= m_scrollbarVert->GetPosition().x ) @@ -735,6 +825,7 @@ wxHitTest wxWindow::DoHitTest(wxCoord x, wxCoord y) const : wxHT_WINDOW_HORZ_SCROLLBAR; } } +#endif // wxUSE_SCROLLBAR return ht; } @@ -747,15 +838,18 @@ wxHitTest wxWindow::DoHitTest(wxCoord x, wxCoord y) const void wxWindow::RefreshScrollbars() { +#if wxUSE_SCROLLBAR if ( m_scrollbarHorz ) m_scrollbarHorz->Refresh(); if ( m_scrollbarVert ) m_scrollbarVert->Refresh(); +#endif // wxUSE_SCROLLBAR } void wxWindow::PositionScrollbars() { +#if wxUSE_SCROLLBAR // do not use GetClientSize/Rect as it relies on the scrollbars being // correctly positioned @@ -801,6 +895,7 @@ void wxWindow::PositionScrollbars() } RefreshScrollbars(); +#endif // wxUSE_SCROLLBAR } void wxWindow::SetScrollbar(int orient, @@ -809,10 +904,11 @@ void wxWindow::SetScrollbar(int orient, int range, bool refresh) { +#if wxUSE_SCROLLBAR wxASSERT_MSG( pageSize <= range, _T("page size can't be greater than range") ); - bool hasClientSizeChanged = FALSE; + bool hasClientSizeChanged = false; wxScrollBar *scrollbar = GetScrollbar(orient); if ( range && (pageSize < range) ) { @@ -820,14 +916,14 @@ void wxWindow::SetScrollbar(int orient, { // create it #if wxUSE_TWO_WINDOWS - SetInsertIntoMain( TRUE ); + SetInsertIntoMain( true ); #endif - scrollbar = new wxScrollBar(this, -1, + scrollbar = new wxScrollBar(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, orient & wxVERTICAL ? wxSB_VERTICAL : wxSB_HORIZONTAL); #if wxUSE_TWO_WINDOWS - SetInsertIntoMain( FALSE ); + SetInsertIntoMain( false ); #endif if ( orient & wxVERTICAL ) m_scrollbarVert = scrollbar; @@ -835,7 +931,7 @@ void wxWindow::SetScrollbar(int orient, m_scrollbarHorz = scrollbar; // the client area diminished as we created a scrollbar - hasClientSizeChanged = TRUE; + hasClientSizeChanged = true; PositionScrollbars(); } @@ -868,7 +964,7 @@ void wxWindow::SetScrollbar(int orient, m_scrollbarHorz = NULL; // the client area increased as we removed a scrollbar - hasClientSizeChanged = TRUE; + hasClientSizeChanged = true; // the size of the remaining scrollbar must be adjusted if ( m_scrollbarHorz || m_scrollbarVert ) @@ -889,14 +985,22 @@ void wxWindow::SetScrollbar(int orient, (void)GetEventHandler()->ProcessEvent(event); #endif } +#else + wxUnusedVar(orient); + wxUnusedVar(pos); + wxUnusedVar(pageSize); + wxUnusedVar(range); + wxUnusedVar(refresh); +#endif // wxUSE_SCROLLBAR } -void wxWindow::SetScrollPos(int orient, int pos, bool refresh) +void wxWindow::SetScrollPos(int orient, int pos, bool WXUNUSED(refresh)) { +#if wxUSE_SCROLLBAR wxScrollBar *scrollbar = GetScrollbar(orient); - wxCHECK_RET( scrollbar, _T("no scrollbar to set position for") ); - scrollbar->SetThumbPosition(pos); + if (scrollbar) + scrollbar->SetThumbPosition(pos); // VZ: I think we can safely ignore this as we always refresh it // automatically whenever the value chanegs @@ -904,24 +1008,43 @@ void wxWindow::SetScrollPos(int orient, int pos, bool refresh) if ( refresh ) Refresh(); #endif +#else + wxUnusedVar(orient); + wxUnusedVar(pos); +#endif // wxUSE_SCROLLBAR } int wxWindow::GetScrollPos(int orient) const { +#if wxUSE_SCROLLBAR wxScrollBar *scrollbar = GetScrollbar(orient); return scrollbar ? scrollbar->GetThumbPosition() : 0; +#else + wxUnusedVar(orient); + return 0; +#endif // wxUSE_SCROLLBAR } int wxWindow::GetScrollThumb(int orient) const { +#if wxUSE_SCROLLBAR wxScrollBar *scrollbar = GetScrollbar(orient); return scrollbar ? scrollbar->GetThumbSize() : 0; +#else + wxUnusedVar(orient); + return 0; +#endif // wxUSE_SCROLLBAR } int wxWindow::GetScrollRange(int orient) const { +#if wxUSE_SCROLLBAR wxScrollBar *scrollbar = GetScrollbar(orient); return scrollbar ? scrollbar->GetRange() : 0; +#else + wxUnusedVar(orient); + return 0; +#endif // wxUSE_SCROLLBAR } void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect) @@ -942,24 +1065,26 @@ void wxWindow::ScrollWindow(int dx, int dy, const wxRect *rect) if ( dx ) { r = ScrollNoRefresh(dx, 0, rect); - Refresh(TRUE /* erase bkgnd */, &r); + Refresh(true /* erase bkgnd */, &r); } if ( dy ) { r = ScrollNoRefresh(0, dy, rect); - Refresh(TRUE /* erase bkgnd */, &r); + Refresh(true /* erase bkgnd */, &r); } // scroll children accordingly: wxPoint offset(dx, dy); - for (wxWindowList::Node *node = GetChildren().GetFirst(); + for (wxWindowList::compatibility_iterator node = GetChildren().GetFirst(); node; node = node->GetNext()) { wxWindow *child = node->GetData(); +#if wxUSE_SCROLLBAR if ( child == m_scrollbarVert || child == m_scrollbarHorz ) continue; +#endif // wxUSE_SCROLLBAR // VS: Scrolling children has non-trivial semantics. If rect=NULL then // it is easy: we scroll all children. Otherwise it gets @@ -1071,12 +1196,12 @@ wxRect wxWindow::ScrollNoRefresh(int dx, int dy, const wxRect *rectTotal) wxMemoryDC dcMem; dcMem.SelectObject(bmp); - dcMem.Blit(wxPoint(0, 0), size, &dc, ptSource + dcMem.Blit(wxPoint(0,0), size, &dc, ptSource #if defined(__WXGTK__) && !defined(wxHAS_WORKING_GTK_DC_BLIT) + GetClientAreaOrigin() #endif // broken wxGTK wxDC::Blit ); - dc.Blit(ptDest, size, &dcMem, wxPoint(0, 0)); + dc.Blit(ptDest, size, &dcMem, wxPoint(0,0)); wxLogTrace(_T("scroll"), _T("Blit: (%d, %d) of size %dx%d -> (%d, %d)"), @@ -1160,7 +1285,7 @@ void wxWindow::OnKeyDown(wxKeyEvent& event) { #if wxUSE_MENUS int key = event.GetKeyCode(); - if ( !event.ControlDown() && (key == WXK_MENU || key == WXK_F10) ) + if ( !event.ControlDown() && (key == WXK_ALT || key == WXK_F10) ) { ms_winLastAltPress = this; @@ -1277,7 +1402,7 @@ void wxWindow::OnChar(wxKeyEvent& event) void wxWindow::OnKeyUp(wxKeyEvent& event) { int key = event.GetKeyCode(); - if ( !event.HasModifiers() && (key == WXK_MENU || key == WXK_F10) ) + if ( !event.HasModifiers() && (key == WXK_ALT || key == WXK_F10) ) { // only process Alt release specially if there were no other key // presses since Alt had been pressed and if both events happened in @@ -1310,7 +1435,7 @@ void wxWindow::OnKeyUp(wxKeyEvent& event) #include "wx/msw/private.h" -long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) +WXLRESULT wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) { if ( message == WM_NCHITTEST ) { @@ -1327,4 +1452,3 @@ long wxWindow::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam) } #endif // __WXMSW__ -