]>
git.saurik.com Git - wxWidgets.git/blob - src/os2/spinctrl.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: msw/spinctrl.cpp
3 // Purpose: wxSpinCtrl class implementation for Win32
4 // Author: David Webster
8 // Copyright: (c) David Webster
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 // ============================================================================
14 // ============================================================================
17 // ----------------------------------------------------------------------------
19 // ----------------------------------------------------------------------------
21 // for compilers that support precompilation, includes "wx.h".
22 #include "wx/wxprec.h"
29 #include "wx/spinctrl.h"
30 #include "wx/os2/private.h"
32 // ----------------------------------------------------------------------------
34 // ----------------------------------------------------------------------------
36 IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl
, wxControl
)
38 // ----------------------------------------------------------------------------
40 // ----------------------------------------------------------------------------
42 // the margin between the up-down control and its buddy
43 static const int MARGIN_BETWEEN
= 5;
45 // ============================================================================
47 // ============================================================================
49 // ----------------------------------------------------------------------------
51 // ----------------------------------------------------------------------------
53 bool wxSpinCtrl::Create(wxWindow
*parent
,
55 const wxString
& value
,
59 int min
, int max
, int initial
,
64 // before using DoGetBestSize(), have to set style to let the base class
65 // know whether this is a horizontal or vertical control (we're always
67 SetWindowStyle(style | wxSP_VERTICAL);
69 // calculate the sizes: the size given is the toal size for both controls
70 // and we need to fit them both in the given width (height is the same)
71 wxSize sizeText(size), sizeBtn(size);
72 sizeBtn.x = wxSpinButton::DoGetBestSize().x;
73 sizeText.x -= sizeBtn.x + MARGIN_BETWEEN;
74 if ( sizeText.x <= 0 )
76 wxLogDebug(_T("not enough space for wxSpinCtrl!"));
80 posBtn.x += sizeText.x + MARGIN_BETWEEN;
82 // create the spin button
83 if ( !wxSpinButton::Create(parent, id, posBtn, sizeBtn, style, name) )
91 // create the text window
92 if ( sizeText.y <= 0 )
94 // make it the same height as the button then
96 wxSpinButton::DoGetSize(&x, &y);
101 m_hwndBuddy = (WXHWND)::CreateWindowEx
103 WS_EX_CLIENTEDGE, // sunken border
104 _T("EDIT"), // window class
105 NULL, // no window title
106 WS_CHILD | WS_VISIBLE | WS_BORDER, // style
107 pos.x, pos.y, // position
108 sizeText.x, sizeText.y, // size
109 GetHwndOf(parent), // parent
110 (HMENU)-1, // control id
111 wxGetInstance(), // app instance
112 NULL // unused client data
117 wxLogLastError("CreateWindow(buddy text window)");
122 // should have the same font as the other controls
123 WXHANDLE hFont = GetParent()->GetFont().GetResourceHandle();
124 ::SendMessage((HWND)m_hwndBuddy, WM_SETFONT, (WPARAM)hFont, TRUE);
126 // associate the text window with the spin button
127 (void)SendMessage(GetHwnd(), UDM_SETBUDDY, (WPARAM)m_hwndBuddy, 0);
132 // ----------------------------------------------------------------------------
134 // ----------------------------------------------------------------------------
136 void wxSpinCtrl::DoMoveWindow(int x
, int y
, int width
, int height
)
138 int widthBtn
= DoGetBestSize().x
;
139 int widthText
= width
- widthBtn
- MARGIN_BETWEEN
;
140 if ( widthText
<= 0 )
142 wxLogDebug(_T("not enough space for wxSpinCtrl!"));
146 if ( !::MoveWindow((HWND)m_hwndBuddy, x, y, widthText, height, TRUE) )
148 wxLogLastError("MoveWindow(buddy)");
151 x += widthText + MARGIN_BETWEEN;
152 if ( !::MoveWindow(GetHwnd(), x, y, widthBtn, height, TRUE) )
154 wxLogLastError("MoveWindow");