wxSL_INVERSE for MSW. Heavily modified patch 1096922.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31912 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Kevin Hock 2005-02-11 04:11:47 +00:00
parent 7ad71baf8e
commit 6bee5ffba4
2 changed files with 19 additions and 7 deletions

View File

@ -99,6 +99,9 @@ protected:
// format an integer value as string
static wxString Format(int n) { return wxString::Format(_T("%d"), n); }
// Common processing to invert slider values based on wxSL_INVERSE
int MSWInvertOrNot(int value) const;
// get the boundig box for the slider and possible labels
wxRect GetBoundingBox() const;

View File

@ -103,6 +103,7 @@ wxBEGIN_FLAGS( wxSliderStyle )
wxFLAGS_MEMBER(wxSL_BOTTOM)
wxFLAGS_MEMBER(wxSL_BOTH)
wxFLAGS_MEMBER(wxSL_SELRANGE)
wxFLAGS_MEMBER(wxSL_INVERSE)
wxEND_FLAGS( wxSliderStyle )
@ -306,7 +307,7 @@ bool wxSlider95::MSWOnScroll(int WXUNUSED(orientation),
return false;
}
int newPos = (int) ::SendMessage((HWND) control, TBM_GETPOS, 0, 0);
int newPos = MSWInvertOrNot((int) ::SendMessage((HWND) control, TBM_GETPOS, 0, 0));
if ( (newPos < GetMin()) || (newPos > GetMax()) )
{
// out of range - but we did process it
@ -506,14 +507,22 @@ wxSize wxSlider95::DoGetBestSize() const
// slider-specific methods
// ----------------------------------------------------------------------------
int wxSlider95::MSWInvertOrNot(int value) const
{
if (m_windowStyle & wxSL_INVERSE)
return (m_rangeMax + m_rangeMin) - value;
else
return value;
}
int wxSlider95::GetValue() const
{
return ::SendMessage(GetHwnd(), TBM_GETPOS, 0, 0);
return MSWInvertOrNot(::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)MSWInvertOrNot(value));
if ( m_labels )
{
@ -530,8 +539,8 @@ void wxSlider95::SetRange(int minValue, int maxValue)
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(MSWInvertOrNot(m_rangeMin)));
::SetWindowText((*m_labels)[SliderLabel_Max], Format(MSWInvertOrNot(m_rangeMax)));
}
}
@ -597,12 +606,12 @@ void wxSlider95::SetThumbLength(int len)
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 );
}
// ----------------------------------------------------------------------------