X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bac409a0049c3577abd2fb5fa875f9bc30bce66c..45212047969548b7d4a848e3a9c6cfdcb0484104:/src/msw/button.cpp diff --git a/src/msw/button.cpp b/src/msw/button.cpp index 6f5cb6782d..4e93fe7cd8 100644 --- a/src/msw/button.cpp +++ b/src/msw/button.cpp @@ -5,8 +5,8 @@ // Modified by: // Created: 04/01/98 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Copyright: (c) Julian Smart +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -46,7 +46,22 @@ // macros // ---------------------------------------------------------------------------- +#if wxUSE_EXTENDED_RTTI +IMPLEMENT_DYNAMIC_CLASS_XTI(wxButton, wxControl,"wx/button.h") + +WX_BEGIN_PROPERTIES_TABLE(wxButton) + WX_DELEGATE( OnClick , wxEVT_COMMAND_BUTTON_CLICKED , wxCommandEvent ) +WX_END_PROPERTIES_TABLE() + +WX_BEGIN_HANDLERS_TABLE(wxButton) +WX_END_HANDLERS_TABLE() + +WX_CONSTRUCTOR_5( wxButton , wxWindow* , Parent , wxWindowID , Id , wxString , Title , wxPoint , Position , wxSize , Size ) + + +#else IMPLEMENT_DYNAMIC_CLASS(wxButton, wxControl) +#endif // this macro tries to adjust the default button height to a reasonable value // using the char height as the base @@ -352,9 +367,18 @@ bool wxButton::MSWCommand(WXUINT param, WXWORD WXUNUSED(id)) bool processed = FALSE; switch ( param ) { + // NOTE: Apparently older versions (NT 4?) of the common controls send + // BN_DOUBLECLICKED but not a second BN_CLICKED for owner-drawn + // buttons, so in order to send two EVET_BUTTON events we should + // catch both types. Currently (Feb 2003) up-to-date versions of + // win98, win2k and winXP all send two BN_CLICKED messages for + // all button types, so we don't catch BN_DOUBLECLICKED anymore + // in order to not get 3 EVT_BUTTON events. If this is a problem + // then we need to figure out which version of the comctl32 changed + // this behaviour and test for it. + case 1: // message came from an accelerator case BN_CLICKED: // normal buttons send this - case BN_DOUBLECLICKED: // owner-drawn ones also send this processed = SendClickEvent(); break; } @@ -406,8 +430,8 @@ static void DrawButtonText(HDC hdc, COLORREF colOld = SetTextColor(hdc, col); int modeOld = SetBkMode(hdc, TRANSPARENT); - DrawText(hdc, text, text.length(), pRect, - DT_CENTER | DT_VCENTER | DT_SINGLELINE); + // Note: we must have DT_SINGLELINE for DT_VCENTER to work. + ::DrawText(hdc, text, text.length(), pRect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); SetBkMode(hdc, modeOld); SetTextColor(hdc, colOld); @@ -415,11 +439,10 @@ static void DrawButtonText(HDC hdc, static void DrawRect(HDC hdc, const RECT& r) { - MoveToEx(hdc, r.left, r.top, NULL); - LineTo(hdc, r.right, r.top); - LineTo(hdc, r.right, r.bottom); - LineTo(hdc, r.left, r.bottom); - LineTo(hdc, r.left, r.top); + wxDrawLine(hdc, r.left, r.top, r.right, r.top); + wxDrawLine(hdc, r.right, r.top, r.right, r.bottom); + wxDrawLine(hdc, r.right, r.bottom, r.left, r.bottom); + wxDrawLine(hdc, r.left, r.bottom, r.left, r.top); } void wxButton::MakeOwnerDrawn() @@ -533,24 +556,20 @@ static void DrawButtonFrame(HDC hdc, const RECT& rectBtn, InflateRect(&r, -1, -1); } - MoveToEx(hdc, r.left, r.bottom, NULL); - LineTo(hdc, r.right, r.bottom); - LineTo(hdc, r.right, r.top - 1); + wxDrawLine(hdc, r.left, r.bottom, r.right, r.bottom); + wxDrawLine(hdc, r.right, r.bottom, r.right, r.top - 1); (void)SelectObject(hdc, hpenWhite); - MoveToEx(hdc, r.left, r.bottom - 1, NULL); - LineTo(hdc, r.left, r.top); - LineTo(hdc, r.right, r.top); + wxDrawLine(hdc, r.left, r.bottom - 1, r.left, r.top); + wxDrawLine(hdc, r.left, r.top, r.right, r.top); (void)SelectObject(hdc, hpenLightGr); - MoveToEx(hdc, r.left + 1, r.bottom - 2, NULL); - LineTo(hdc, r.left + 1, r.top + 1); - LineTo(hdc, r.right - 1, r.top + 1); + wxDrawLine(hdc, r.left + 1, r.bottom - 2, r.left + 1, r.top + 1); + wxDrawLine(hdc, r.left + 1, r.top + 1, r.right - 1, r.top + 1); (void)SelectObject(hdc, hpenGrey); - MoveToEx(hdc, r.left + 1, r.bottom - 1, NULL); - LineTo(hdc, r.right - 1, r.bottom - 1); - LineTo(hdc, r.right - 1, r.top); + wxDrawLine(hdc, r.left + 1, r.bottom - 1, r.right - 1, r.bottom - 1); + wxDrawLine(hdc, r.right - 1, r.bottom - 1, r.right - 1, r.top); } (void)SelectObject(hdc, hpenOld);