X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a23fd0e1d1329a4a258b4defb3e0b0001b700c6e..c6eba8f8b204b0d722db0007e3e0d5e2d2d20085:/src/msw/control.cpp diff --git a/src/msw/control.cpp b/src/msw/control.cpp index 542d3d7b08..6788e0ceb7 100644 --- a/src/msw/control.cpp +++ b/src/msw/control.cpp @@ -34,11 +34,6 @@ #include #endif -#ifdef GetCharWidth -#undef GetCharWidth -#undef GetWindowProc -#endif - #if !USE_SHARED_LIBRARY IMPLEMENT_ABSTRACT_CLASS(wxControl, wxWindow) @@ -48,75 +43,43 @@ END_EVENT_TABLE() #endif // Item members -wxControl::wxControl(void) +wxControl::wxControl() { m_backgroundColour = *wxWHITE; m_foregroundColour = *wxBLACK; + +#if WXWIN_COMPATIBILITY m_callback = 0; -// m_windowCursor = wxNullCursor; // To avoid the standard cursor being used +#endif // WXWIN_COMPATIBILITY } -wxControl::~wxControl(void) +wxControl::~wxControl() { - m_isBeingDeleted = TRUE; - - // If we delete an item, we should initialize the parent panel, - // because it could now be invalid. - wxWindow *parent = (wxWindow *)GetParent(); - if (parent) - { - if (parent->GetDefaultItem() == (wxButton*) this) - parent->SetDefaultItem(NULL); - } -} + m_isBeingDeleted = TRUE; -void wxControl::SetLabel(const wxString& label) -{ - if (GetHWND()) - SetWindowText((HWND) GetHWND(), (const char *)label); -} - -wxString wxControl::GetLabel(void) const -{ - wxBuffer[0] = 0; - if (GetHWND()) + // If we delete an item, we should initialize the parent panel, + // because it could now be invalid. + wxWindow *parent = (wxWindow *)GetParent(); + if (parent) { - int len = GetWindowText((HWND)GetHWND(), wxBuffer, 256); - wxBuffer[len] = 0; + if (parent->GetDefaultItem() == (wxButton*) this) + parent->SetDefaultItem(NULL); } - - return wxString(wxBuffer); } -// Call this repeatedly for several wnds to find the overall size -// of the widget. -// Call it initially with -1 for all values in rect. -// Keep calling for other widgets, and rect will be modified -// to calculate largest bounding rectangle. -void wxFindMaxSize(WXHWND wnd, RECT *rect) +bool wxControl::ProcessCommand(wxCommandEvent& event) { - int left = rect->left; - int right = rect->right; - int top = rect->top; - int bottom = rect->bottom; - - GetWindowRect((HWND) wnd, rect); - - if (left < 0) - return; - - if (left < rect->left) - rect->left = left; - - if (right > rect->right) - rect->right = right; - - if (top < rect->top) - rect->top = top; +#if WXWIN_COMPATIBILITY + if ( m_callback ) + { + (void)(*m_callback)(this, event); - if (bottom > rect->bottom) - rect->bottom = bottom; + return TRUE; + } + else +#endif // WXWIN_COMPATIBILITY + return GetEventHandler()->ProcessEvent(event); } #ifdef __WIN95__ @@ -168,70 +131,57 @@ bool wxControl::MSWOnNotify(int idCtrl, } #endif // Win95 -void wxControl::ProcessCommand (wxCommandEvent & event) -{ - // Tries: - // 1) A callback function (to become obsolete) - // 2) OnCommand, starting at this window and working up parent hierarchy - // 3) OnCommand then calls ProcessEvent to search the event tables. - if (m_callback) - { - (void) (*(m_callback)) (*this, event); - } - else - { - GetEventHandler()->OnCommand(*this, event); - } -} - void wxControl::OnEraseBackground(wxEraseEvent& event) { - // In general, you don't want to erase the background of a control, - // or you'll get a flicker. - // TODO: move this 'null' function into each control that - // might flicker. - - RECT rect; - ::GetClientRect((HWND) GetHWND(), &rect); - - HBRUSH hBrush = ::CreateSolidBrush(PALETTERGB(GetBackgroundColour().Red(), GetBackgroundColour().Green(), GetBackgroundColour().Blue())); - int mode = ::SetMapMode((HDC) event.GetDC()->GetHDC(), MM_TEXT); - - ::FillRect ((HDC) event.GetDC()->GetHDC(), &rect, hBrush); - ::DeleteObject(hBrush); - ::SetMapMode((HDC) event.GetDC()->GetHDC(), mode); + // In general, you don't want to erase the background of a control, + // or you'll get a flicker. + // TODO: move this 'null' function into each control that + // might flicker. + + RECT rect; + ::GetClientRect((HWND) GetHWND(), &rect); + + HBRUSH hBrush = ::CreateSolidBrush(PALETTERGB(GetBackgroundColour().Red(), + GetBackgroundColour().Green(), + GetBackgroundColour().Blue())); + int mode = ::SetMapMode((HDC) event.GetDC()->GetHDC(), MM_TEXT); + + ::FillRect ((HDC) event.GetDC()->GetHDC(), &rect, hBrush); + ::DeleteObject(hBrush); + ::SetMapMode((HDC) event.GetDC()->GetHDC(), mode); } -void wxControl::SetClientSize (int width, int height) -{ - SetSize (-1, -1, width, height); -} +// --------------------------------------------------------------------------- +// global functions +// --------------------------------------------------------------------------- -void wxControl::Centre (int direction) +// Call this repeatedly for several wnds to find the overall size +// of the widget. +// Call it initially with -1 for all values in rect. +// Keep calling for other widgets, and rect will be modified +// to calculate largest bounding rectangle. +void wxFindMaxSize(WXHWND wnd, RECT *rect) { - int x, y, width, height, panel_width, panel_height, new_x, new_y; + int left = rect->left; + int right = rect->right; + int top = rect->top; + int bottom = rect->bottom; - wxWindow *parent = (wxWindow *) GetParent (); - if (!parent) - return; + GetWindowRect((HWND) wnd, rect); - parent->GetClientSize (&panel_width, &panel_height); - GetSize (&width, &height); - GetPosition (&x, &y); + if (left < 0) + return; - new_x = x; - new_y = y; + if (left < rect->left) + rect->left = left; - if (direction & wxHORIZONTAL) - new_x = (int) ((panel_width - width) / 2); + if (right > rect->right) + rect->right = right; - if (direction & wxVERTICAL) - new_y = (int) ((panel_height - height) / 2); + if (top < rect->top) + rect->top = top; - SetSize (new_x, new_y, width, height); - int temp_x, temp_y; - GetPosition (&temp_x, &temp_y); - GetPosition (&temp_x, &temp_y); + if (bottom > rect->bottom) + rect->bottom = bottom; } -