wxFLAGS_MEMBER(wxSL_BOTTOM)
wxFLAGS_MEMBER(wxSL_BOTH)
wxFLAGS_MEMBER(wxSL_SELRANGE)
+ wxFLAGS_MEMBER(wxSL_INVERSE)
wxEND_FLAGS( wxSliderStyle )
SetValue(value);
SetPageSize((maxValue - minValue)/10);
+ // we need to position the labels correctly if we have them and if
+ // SetSize() hadn't been called before (when best size was determined by
+ // MSWCreateControl()) as in this case they haven't been put in place yet
+ if ( m_labels && size.x != wxDefaultCoord && size.y != wxDefaultCoord )
+ {
+ SetSize(size);
+ }
+
return true;
}
return false;
}
- int newPos = (int) ::SendMessage((HWND) control, TBM_GETPOS, 0, 0);
+ int newPos = ValueInvertOrNot((int) ::SendMessage((HWND) control, TBM_GETPOS, 0, 0));
if ( (newPos < GetMin()) || (newPos > GetMax()) )
{
// out of range - but we did process it
wxRect rect(x, y, w, h);
if ( m_labels )
- rect.Union(m_labels->GetBoundingBox());
+ {
+ wxRect lrect = m_labels->GetBoundingBox();
+ GetParent()->ScreenToClient(&lrect.x, &lrect.y);
+ rect.Union(lrect);
+ }
return rect;
}
return;
}
+ // be careful to position the slider itself after moving the labels as
+ // otherwise our GetBoundingBox(), which is called from WM_SIZE handler,
+ // would return a wrong result and wrong size would be cached internally
if ( HasFlag(wxSL_VERTICAL) )
{
int wLabel;
int xLabel = HasFlag(wxSL_LEFT) ? x + width - wLabel : x;
- // position the slider itself along the left/right edge
- ::MoveWindow(GetHwnd(),
- HasFlag(wxSL_LEFT) ? x : x + wLabel + HGAP,
- y + hLabel/2,
- width - wLabel - HGAP,
- height - hLabel,
- TRUE);
-
// position all labels: min at the top, value in the middle and max at
// the bottom
::MoveWindow((*m_labels)[SliderLabel_Min],
::MoveWindow((*m_labels)[SliderLabel_Max],
xLabel, y + height - hLabel, wLabel, hLabel, TRUE);
+
+ // position the slider itself along the left/right edge
+ ::MoveWindow(GetHwnd(),
+ HasFlag(wxSL_LEFT) ? x : x + wLabel + HGAP,
+ y + hLabel/2,
+ width - wLabel - HGAP,
+ height - hLabel,
+ TRUE);
}
else // horizontal
{
int yLabel = HasFlag(wxSL_TOP) ? y + height - hLabel : y;
- // position the slider itself along the top/bottom edge
- ::MoveWindow(GetHwnd(),
- x,
- HasFlag(wxSL_TOP) ? y : y + hLabel,
- width,
- height - hLabel,
- TRUE);
-
// position all labels: min on the left, value in the middle and max to
// the right
::MoveWindow((*m_labels)[SliderLabel_Min],
::MoveWindow((*m_labels)[SliderLabel_Max],
x + width - wLabel, yLabel, wLabel, hLabel, TRUE);
+
+ // position the slider itself along the top/bottom edge
+ ::MoveWindow(GetHwnd(),
+ x,
+ HasFlag(wxSL_TOP) ? y : y + hLabel,
+ width,
+ height - hLabel,
+ TRUE);
}
}
int wxSlider95::GetValue() const
{
- return ::SendMessage(GetHwnd(), TBM_GETPOS, 0, 0);
+ return ValueInvertOrNot(::SendMessage(GetHwnd(), TBM_GETPOS, 0, 0));
}
void wxSlider95::SetValue(int value)
{
- ::SendMessage(GetHwnd(), TBM_SETPOS, (WPARAM)TRUE, (LPARAM)value);
+ ::SendMessage(GetHwnd(), TBM_SETPOS, (WPARAM)TRUE, (LPARAM)ValueInvertOrNot(value));
if ( m_labels )
{
if ( m_labels )
{
- ::SetWindowText((*m_labels)[SliderLabel_Min], Format(m_rangeMin));
- ::SetWindowText((*m_labels)[SliderLabel_Max], Format(m_rangeMax));
+ ::SetWindowText((*m_labels)[SliderLabel_Min], Format(ValueInvertOrNot(m_rangeMin)));
+ ::SetWindowText((*m_labels)[SliderLabel_Max], Format(ValueInvertOrNot(m_rangeMax)));
}
}
int wxSlider95::GetThumbLength() const
{
- return (int)::SendMessage( GetHwnd(), TBM_GETTHUMBLENGTH, 0, 0);
+ return (int)::SendMessage( GetHwnd(), TBM_GETTHUMBLENGTH, 0, 0);
}
void wxSlider95::SetTick(int tickPos)
{
- ::SendMessage( GetHwnd(), TBM_SETTIC, (WPARAM) 0, (LPARAM) tickPos );
+ ::SendMessage( GetHwnd(), TBM_SETTIC, (WPARAM) 0, (LPARAM) tickPos );
}
// ----------------------------------------------------------------------------
return m_labels ? (WXHWND)(*m_labels)[SliderLabel_Value] : NULL;
}
-bool wxSlider95::ContainsHWND(WXHWND hWnd) const
-{
- return m_labels && m_labels->HasWindow((HWND)hWnd);
-}
-
-bool wxSlider95::Show(bool show)
-{
- if ( !wxSliderBase::Show(show) )
- return false;
-
- if ( m_labels )
- m_labels->Show(show);
-
- return true;
-}
+WX_FORWARD_STD_METHODS_TO_SUBWINDOWS(wxSlider95, wxSliderBase, m_labels)
#endif // wxUSE_SLIDER