1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     wxSlider95, using the Win95 trackbar control 
   4 // Author:      Julian Smart 
   8 // Copyright:   (c) Julian Smart 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) 
  13 #pragma implementation "slider95.h" 
  16 // For compilers that support precompilation, includes "wx.h". 
  17 #include "wx/wxprec.h" 
  28 #include "wx/slider.h" 
  33 #include "wx/msw/slider95.h" 
  34 #include "wx/msw/private.h" 
  36 #if defined(__WIN95__) && !(defined(__GNUWIN32_OLD__) && !defined(__CYGWIN10__)) 
  40 #if wxUSE_EXTENDED_RTTI 
  41 WX_DEFINE_FLAGS( wxSliderStyle 
) 
  43 wxBEGIN_FLAGS( wxSliderStyle 
) 
  44     // new style border flags, we put them first to 
  45     // use them for streaming out 
  46     wxFLAGS_MEMBER(wxBORDER_SIMPLE
) 
  47     wxFLAGS_MEMBER(wxBORDER_SUNKEN
) 
  48     wxFLAGS_MEMBER(wxBORDER_DOUBLE
) 
  49     wxFLAGS_MEMBER(wxBORDER_RAISED
) 
  50     wxFLAGS_MEMBER(wxBORDER_STATIC
) 
  51     wxFLAGS_MEMBER(wxBORDER_NONE
) 
  53     // old style border flags 
  54     wxFLAGS_MEMBER(wxSIMPLE_BORDER
) 
  55     wxFLAGS_MEMBER(wxSUNKEN_BORDER
) 
  56     wxFLAGS_MEMBER(wxDOUBLE_BORDER
) 
  57     wxFLAGS_MEMBER(wxRAISED_BORDER
) 
  58     wxFLAGS_MEMBER(wxSTATIC_BORDER
) 
  59     wxFLAGS_MEMBER(wxBORDER
) 
  61     // standard window styles 
  62     wxFLAGS_MEMBER(wxTAB_TRAVERSAL
) 
  63     wxFLAGS_MEMBER(wxCLIP_CHILDREN
) 
  64     wxFLAGS_MEMBER(wxTRANSPARENT_WINDOW
) 
  65     wxFLAGS_MEMBER(wxWANTS_CHARS
) 
  66     wxFLAGS_MEMBER(wxFULL_REPAINT_ON_RESIZE
) 
  67     wxFLAGS_MEMBER(wxALWAYS_SHOW_SB 
) 
  68     wxFLAGS_MEMBER(wxVSCROLL
) 
  69     wxFLAGS_MEMBER(wxHSCROLL
) 
  71     wxFLAGS_MEMBER(wxSL_HORIZONTAL
) 
  72     wxFLAGS_MEMBER(wxSL_VERTICAL
) 
  73     wxFLAGS_MEMBER(wxSL_AUTOTICKS
) 
  74     wxFLAGS_MEMBER(wxSL_LABELS
) 
  75     wxFLAGS_MEMBER(wxSL_LEFT
) 
  76     wxFLAGS_MEMBER(wxSL_TOP
) 
  77     wxFLAGS_MEMBER(wxSL_RIGHT
) 
  78     wxFLAGS_MEMBER(wxSL_BOTTOM
) 
  79     wxFLAGS_MEMBER(wxSL_BOTH
) 
  80     wxFLAGS_MEMBER(wxSL_SELRANGE
) 
  82 wxEND_FLAGS( wxSliderStyle 
) 
  84 IMPLEMENT_DYNAMIC_CLASS_XTI(wxSlider95
, wxControl
,"wx/scrolbar.h") 
  86 wxBEGIN_PROPERTIES_TABLE(wxSlider95
) 
  87     wxEVENT_RANGE_PROPERTY( Scroll 
, wxEVT_SCROLL_TOP 
, wxEVT_SCROLL_ENDSCROLL 
, wxScrollEvent 
) 
  88     wxEVENT_PROPERTY( Updated 
, wxEVT_COMMAND_SLIDER_UPDATED 
, wxCommandEvent 
) 
  90     wxPROPERTY( Value 
, int , SetValue
, GetValue 
, 0, 0 /*flags*/ , wxT("Helpstring") , wxT("group")) 
  91         wxPROPERTY( Minimum 
, int , SetMin
, GetMin
, 0 , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) 
  92         wxPROPERTY( Maximum 
, int , SetMax
, GetMax
, 0 , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) 
  93         wxPROPERTY( PageSize 
, int , SetPageSize
, GetLineSize
, 1 , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) 
  94         wxPROPERTY( LineSize 
, int , SetLineSize
, GetLineSize
, 1 , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) 
  95         wxPROPERTY( ThumbLength 
, int , SetThumbLength
, GetThumbLength
, 1 , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) 
  96     wxPROPERTY_FLAGS( WindowStyle 
, wxSliderStyle 
, long , SetWindowStyleFlag 
, GetWindowStyleFlag 
, , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style 
  97 wxEND_PROPERTIES_TABLE() 
  99 wxBEGIN_HANDLERS_TABLE(wxSlider95
) 
 100 wxEND_HANDLERS_TABLE() 
 102 wxCONSTRUCTOR_8( wxSlider95 
, wxWindow
* , Parent 
, wxWindowID 
, Id 
, int , Value 
, int , Minimum 
, int , Maximum 
, wxPoint 
, Position 
, wxSize 
, Size 
, long , WindowStyle 
) 
 104 IMPLEMENT_DYNAMIC_CLASS(wxSlider95
, wxControl
) 
 108 wxSlider95::wxSlider95() 
 110     m_staticValue 
= (WXHWND
) NULL
; 
 111     m_staticMin 
= (WXHWND
) NULL
; 
 112     m_staticMax 
= (WXHWND
) NULL
; 
 120 bool wxSlider95::Create(wxWindow 
*parent
, wxWindowID id
, 
 121            int value
, int minValue
, int maxValue
, 
 123            const wxSize
& size
, long style
, 
 124            const wxValidator
& wxVALIDATOR_PARAM(validator
), 
 125            const wxString
& name
) 
 127     if ( (style 
& wxBORDER_MASK
) == wxBORDER_DEFAULT 
) 
 128         style 
|= wxBORDER_NONE
; 
 132     SetValidator(validator
); 
 133 #endif // wxUSE_VALIDATORS 
 135     if (parent
) parent
->AddChild(this); 
 137     SetBackgroundColour(parent
->GetBackgroundColour()) ; 
 138     SetForegroundColour(parent
->GetForegroundColour()) ; 
 140     m_staticValue 
= (WXHWND
) NULL
;; 
 141     m_staticMin 
= (WXHWND
) NULL
;; 
 142     m_staticMax 
= (WXHWND
) NULL
;; 
 145     m_windowStyle 
= style
; 
 149         m_windowId 
= (int)NewControlId(); 
 161     if ( m_windowStyle 
& wxSL_LABELS 
) 
 163         msStyle 
|= SS_CENTER
; 
 166         long valueStyle 
= m_windowStyle 
& ~wxBORDER_MASK
; 
 167         valueStyle 
|= wxBORDER_SUNKEN
; 
 168         msStyle 
|= MSWGetStyle(valueStyle
, & exStyle
) ; 
 170         m_staticValue 
= (WXHWND
) CreateWindowEx
 
 172                 exStyle
, wxT("STATIC"), NULL
, 
 174                 0, 0, 0, 0, (HWND
) parent
->GetHWND(), (HMENU
)NewControlId(), 
 175                 wxGetInstance(), NULL
 
 178         // Now create min static control 
 180         minLabel
.Printf(wxT("%d"), minValue
); 
 181         wstyle 
= STATIC_FLAGS
; 
 182         if ( m_windowStyle 
& wxCLIP_SIBLINGS 
) 
 183             msStyle 
|= WS_CLIPSIBLINGS
; 
 184         m_staticMin 
= (WXHWND
) CreateWindowEx
 
 186                 0, wxT("STATIC"), minLabel
, 
 188                 0, 0, 0, 0, (HWND
) parent
->GetHWND(), (HMENU
)NewControlId(), 
 189                 wxGetInstance(), NULL
 
 195     msStyle 
= MSWGetStyle(GetWindowStyle(), & exStyle
) ;     
 197     if (m_windowStyle 
& wxSL_VERTICAL
) 
 198         msStyle 
= TBS_VERT 
| WS_CHILD 
| WS_VISIBLE 
| WS_TABSTOP 
; 
 200         msStyle 
= TBS_HORZ 
| WS_CHILD 
| WS_VISIBLE 
| WS_TABSTOP 
; 
 202     if ( m_windowStyle 
& wxSL_AUTOTICKS 
) 
 203         msStyle 
|= TBS_AUTOTICKS 
; 
 205     if ( m_windowStyle 
& wxSL_LEFT 
) 
 207     else if ( m_windowStyle 
& wxSL_RIGHT 
) 
 208         msStyle 
|= TBS_RIGHT
; 
 209     else if ( m_windowStyle 
& wxSL_TOP 
) 
 211     else if ( m_windowStyle 
& wxSL_BOTTOM 
) 
 212         msStyle 
|= TBS_BOTTOM
; 
 213     else if ( m_windowStyle 
& wxSL_BOTH 
) 
 215     else if ( ! (m_windowStyle 
& wxSL_AUTOTICKS
) ) 
 216         msStyle 
|= TBS_NOTICKS
; 
 218     if ( m_windowStyle 
& wxSL_SELRANGE 
) 
 219         msStyle 
|= TBS_ENABLESELRANGE
; 
 221     HWND scroll_bar 
= CreateWindowEx
 
 223             exStyle
, TRACKBAR_CLASS
, wxEmptyString
, 
 225             0, 0, 0, 0, (HWND
) parent
->GetHWND(), (HMENU
)m_windowId
, 
 226             wxGetInstance(), NULL
 
 229     m_rangeMax 
= maxValue
; 
 230     m_rangeMin 
= minValue
; 
 232     m_pageSize 
= (int)((maxValue
-minValue
)/10); 
 234     ::SendMessage(scroll_bar
, TBM_SETRANGE
, TRUE
, MAKELONG(minValue
, maxValue
)); 
 235     ::SendMessage(scroll_bar
, TBM_SETPOS
, TRUE
, (LPARAM
)value
); 
 236     ::SendMessage(scroll_bar
, TBM_SETPAGESIZE
, 0, (LPARAM
)m_pageSize
); 
 238     m_hWnd 
= (WXHWND
)scroll_bar
; 
 240     SubclassWin(GetHWND()); 
 242     ::SetWindowText((HWND
) m_hWnd
, wxEmptyString
); 
 244     if ( m_windowStyle 
& wxSL_LABELS 
) 
 246         // Finally, create max value static item 
 248         maxLabel
.Printf(wxT("%d"), maxValue
); 
 249         wstyle 
= STATIC_FLAGS
; 
 251         if ( m_windowStyle 
& wxCLIP_SIBLINGS 
) 
 252             msStyle 
|= WS_CLIPSIBLINGS
; 
 254         m_staticMax 
= (WXHWND
) CreateWindowEx
 
 256                 0, wxT("STATIC"), maxLabel
, 
 258                 0, 0, 0, 0, (HWND
) parent
->GetHWND(), (HMENU
)NewControlId(), 
 259                 wxGetInstance(), NULL
 
 265             if (GetFont().GetResourceHandle()) 
 268                     ::SendMessage((HWND
) m_staticMin
, WM_SETFONT
, 
 269                           (WPARAM
) GetFont().GetResourceHandle(), 0L); 
 272                     ::SendMessage((HWND
) m_staticMax
, WM_SETFONT
, 
 273                         (WPARAM
) GetFont().GetResourceHandle(), 0L); 
 276                     ::SendMessage((HWND
) m_staticValue
, WM_SETFONT
, 
 277                         (WPARAM
) GetFont().GetResourceHandle(), 0L); 
 282     SetSize(x
, y
, width
, height
); 
 288 bool wxSlider95::MSWOnScroll(int WXUNUSED(orientation
), WXWORD wParam
, 
 289                              WXWORD 
WXUNUSED(pos
), WXHWND control
) 
 291     wxEventType scrollEvent
; 
 295             scrollEvent 
= wxEVT_SCROLL_TOP
; 
 299             scrollEvent 
= wxEVT_SCROLL_BOTTOM
; 
 303             scrollEvent 
= wxEVT_SCROLL_LINEUP
; 
 307             scrollEvent 
= wxEVT_SCROLL_LINEDOWN
; 
 311             scrollEvent 
= wxEVT_SCROLL_PAGEUP
; 
 315             scrollEvent 
= wxEVT_SCROLL_PAGEDOWN
; 
 319             scrollEvent 
= wxEVT_SCROLL_THUMBTRACK
; 
 322         case SB_THUMBPOSITION
: 
 323             scrollEvent 
= wxEVT_SCROLL_THUMBRELEASE
; 
 327             scrollEvent 
= wxEVT_SCROLL_ENDSCROLL
; 
 331             // unknown scroll event? 
 335     int newPos 
= (int) ::SendMessage((HWND
) control
, TBM_GETPOS
, 0, 0); 
 336     if ( (newPos 
< GetMin()) || (newPos 
> GetMax()) ) 
 338         // out of range - but we did process it 
 344     wxScrollEvent 
event(scrollEvent
, m_windowId
); 
 345     event
.SetPosition(newPos
); 
 346     event
.SetEventObject( this ); 
 347     GetEventHandler()->ProcessEvent(event
); 
 349     wxCommandEvent 
cevent( wxEVT_COMMAND_SLIDER_UPDATED
, GetId() ); 
 350     cevent
.SetInt( newPos 
); 
 351     cevent
.SetEventObject( this ); 
 353     return GetEventHandler()->ProcessEvent( cevent 
); 
 356 wxSlider95::~wxSlider95() 
 360         ::DestroyWindow((HWND
) m_staticMin
); 
 361         m_staticMin 
= (WXHWND
) NULL
; 
 366         ::DestroyWindow((HWND
) m_staticMax
); 
 367         m_staticMax 
= (WXHWND
) NULL
; 
 372         ::DestroyWindow((HWND
) m_staticValue
); 
 373         m_staticValue 
= (WXHWND
) NULL
; 
 377 int wxSlider95::GetValue() const 
 379     return ::SendMessage(GetHwnd(), TBM_GETPOS
, 0, 0); 
 382 void wxSlider95::SetValue(int value
) 
 384     ::SendMessage(GetHwnd(), TBM_SETPOS
, (WPARAM
)TRUE
, (LPARAM
)value
); 
 389         str
.Printf(wxT("%d"), value
); 
 390         ::SetWindowText((HWND
) m_staticValue
, str
); 
 394 void wxSlider95::DoGetSize(int *width
, int *height
) const 
 397     rect
.left 
= -1; rect
.right 
= -1; rect
.top 
= -1; rect
.bottom 
= -1; 
 399     wxFindMaxSize(GetHWND(), &rect
); 
 402         wxFindMaxSize(m_staticMin
, &rect
); 
 405         wxFindMaxSize(m_staticMax
, &rect
); 
 408         wxFindMaxSize(m_staticValue
, &rect
); 
 411         *width 
= rect
.right 
- rect
.left
; 
 413         *height 
= rect
.bottom 
- rect
.top
; 
 416 void wxSlider95::GetPosition(int *x
, int *y
) const 
 418     wxWindow 
*parent 
= GetParent(); 
 420     rect
.left 
= -1; rect
.right 
= -1; rect
.top 
= -1; rect
.bottom 
= -1; 
 422     wxFindMaxSize(GetHWND(), &rect
); 
 425         wxFindMaxSize(m_staticMin
, &rect
); 
 427         wxFindMaxSize(m_staticMax
, &rect
); 
 429         wxFindMaxSize(m_staticValue
, &rect
); 
 431     // Since we now have the absolute screen coords, 
 432     // if there's a parent we must subtract its top left corner 
 437         ::ScreenToClient((HWND
) parent
->GetHWND(), &point
); 
 439     // We may be faking the client origin. 
 440     // So a window that's really at (0, 30) may appear 
 441     // (to wxWin apps) to be at (0, 0). 
 444         wxPoint 
pt(GetParent()->GetClientAreaOrigin()); 
 453 // TODO one day, make sense of all this horros and replace it with a readable 
 455 void wxSlider95::DoSetSize(int x
, int y
, int width
, int height
, int sizeFlags
) 
 462     int currentX
, currentY
; 
 463     GetPosition(¤tX
, ¤tY
); 
 464     if (x 
== -1 && !(sizeFlags 
& wxSIZE_ALLOW_MINUS_ONE
)) 
 466     if (y 
== -1 && !(sizeFlags 
& wxSIZE_ALLOW_MINUS_ONE
)) 
 469     AdjustForParentClientOrigin(x1
, y1
, sizeFlags
); 
 476     int cx
;     // slider,min,max sizes 
 480     wxGetCharSize(GetHWND(), &cx
, &cy
, & this->GetFont()); 
 482     if ((m_windowStyle 
& wxSL_VERTICAL
) != wxSL_VERTICAL
) 
 484         if ( m_windowStyle 
& wxSL_LABELS 
) 
 488             ::GetWindowText((HWND
) m_staticMin
, buf
, 300); 
 489             GetTextExtent(buf
, &min_len
, &cyf
,NULL
,NULL
, & this->GetFont()); 
 493             ::GetWindowText((HWND
) m_staticMax
, buf
, 300); 
 494             GetTextExtent(buf
, &max_len
, &cyf
,NULL
,NULL
, & this->GetFont()); 
 497                 int new_width 
= (int)(wxMax(min_len
, max_len
)); 
 498                 int valueHeight 
= (int)cyf
; 
 500                 // For some reason, under Win95, the text edit control has 
 501                 // a lot of space before the first character 
 504                 // The height needs to be a bit bigger under Win95 if 
 505                 // using native 3D effects. 
 506                 valueHeight 
= (int) (valueHeight 
* 1.5) ; 
 507                 ::MoveWindow((HWND
) m_staticValue
, x_offset
, y_offset
, 
 508                     new_width
, valueHeight
, TRUE
); 
 509                 x_offset 
+= new_width 
+ cx
; 
 512             MoveWindow((HWND
) m_staticMin
, x_offset
, y_offset
, 
 513                 (int) min_len
, cy
, TRUE
); 
 514             x_offset 
+= (int)(min_len 
+ cx
); 
 516             // slider_length = (total width available) - (width used so far) 
 517             //                   - (width of max label) - (border) 
 518             int slider_length 
= (int)(w1 
- (x_offset
-x
) - max_len 
- cx
); 
 520             int slider_height 
= h1
; 
 521             if (slider_height 
< 0 ) 
 524             // Slider must have a minimum/default length/height 
 525             if (slider_length 
< 100) 
 528             ::MoveWindow(GetHwnd(), x_offset
, y_offset
, 
 529                 slider_length
, slider_height
, TRUE
); 
 530             x_offset 
+= slider_length 
+ cx
; 
 532             MoveWindow((HWND
) m_staticMax
, x_offset
, y_offset
, 
 533                 (int) max_len
, cy
, TRUE
); 
 538             // If we're prepared to use the existing size, then... 
 543                 && ((sizeFlags 
& wxSIZE_AUTO
) != wxSIZE_AUTO
) 
 554             ::MoveWindow(GetHwnd(), x1
, y1
, w1
, h1
, TRUE
); 
 559         if ( m_windowStyle 
& wxSL_LABELS 
) 
 562             ::GetWindowText((HWND
) m_staticMin
, buf
, 300); 
 563             GetTextExtent(buf
, &min_len
, &cyf
,NULL
,NULL
, & this->GetFont()); 
 566             ::GetWindowText((HWND
) m_staticMax
, buf
, 300); 
 567             GetTextExtent(buf
, &max_len
, &cyf
,NULL
,NULL
, & this->GetFont()); 
 571                 int new_width 
= (int)(wxMax(min_len
, max_len
)); 
 572                 int valueHeight 
= (int)cyf
; 
 575                 // The height needs to be a bit bigger under Win95 if 
 576                 // using native 3D effects. 
 577                 valueHeight 
= (int) (valueHeight 
* 1.5) ; 
 579                 ::MoveWindow((HWND
) m_staticValue
, x_offset
, y_offset
, 
 580                     new_width
, valueHeight
, TRUE
); 
 581                 y_offset 
+= valueHeight
; 
 584             ::MoveWindow((HWND
) m_staticMin
, x_offset
, y_offset
, 
 585                 (int) min_len
, cy
, TRUE
); 
 588             //  slider_length = (total height available) - (height used so far)  
 589             //                              - (height of max label) - (border) 
 590             int slider_length 
= (int)(h1 
- (y_offset
-y
) - cy 
- cy
); 
 592             int slider_width 
= w1
; 
 593             if (slider_width 
< 0 ) 
 596             // Slider must have a minimum/default length 
 597             if (slider_length 
< 100) 
 600             ::MoveWindow(GetHwnd(), x_offset
, y_offset
, 
 601                 slider_width
, slider_length
, TRUE
); 
 602             y_offset 
+= slider_length
; 
 604             ::MoveWindow((HWND
) m_staticMax
, x_offset
, y_offset
, 
 605                 (int)max_len
, cy
, TRUE
); 
 610             // If we're prepared to use the existing size, then... 
 613                 width 
== -1 && height 
== -1 
 614                 && ((sizeFlags 
& wxSIZE_AUTO
) != wxSIZE_AUTO
) 
 625             ::MoveWindow(GetHwnd(), x1
, y1
, w1
, h1
, TRUE
); 
 630 void wxSlider95::SetRange(int minValue
, int maxValue
) 
 632     m_rangeMin 
= minValue
; 
 633     m_rangeMax 
= maxValue
; 
 635     ::SendMessage(GetHwnd(), TBM_SETRANGE
, TRUE
, MAKELONG(minValue
, maxValue
)); 
 640         wxSprintf(buf
, wxT("%d"), m_rangeMin
); 
 641         ::SetWindowText((HWND
) m_staticMin
, buf
); 
 646         wxSprintf(buf
, wxT("%d"), m_rangeMax
); 
 647         ::SetWindowText((HWND
) m_staticMax
, buf
); 
 651 WXHBRUSH 
wxSlider95::OnCtlColor(WXHDC pDC
, WXHWND pWnd
, WXUINT nCtlColor
, 
 652             WXUINT message
, WXWPARAM wParam
, WXLPARAM lParam
) 
 655     if ( nCtlColor 
== CTLCOLOR_SCROLLBAR 
) 
 658     if ( nCtlColor 
!= CTLCOLOR_STATIC 
) 
 661     // Otherwise, it's a static 
 662     return wxControl::OnCtlColor(pDC
, pWnd
, nCtlColor
, message
, wParam
, lParam
); 
 665 // For trackbars only 
 666 void wxSlider95::SetTickFreq(int n
, int pos
) 
 669   ::SendMessage( GetHwnd(), TBM_SETTICFREQ
, (WPARAM
) n
, (LPARAM
) pos 
); 
 672 void wxSlider95::SetPageSize(int pageSize
) 
 674   ::SendMessage( GetHwnd(), TBM_SETPAGESIZE
, (WPARAM
) 0, (LPARAM
) pageSize 
); 
 675   m_pageSize 
= pageSize
; 
 678 int wxSlider95::GetPageSize() const 
 683 void wxSlider95::ClearSel() 
 685   ::SendMessage( GetHwnd(), TBM_CLEARSEL
, (WPARAM
) TRUE
, (LPARAM
) 0 ); 
 688 void wxSlider95::ClearTicks() 
 690   ::SendMessage( GetHwnd(), TBM_CLEARTICS
, (WPARAM
) TRUE
, (LPARAM
) 0 ); 
 693 void wxSlider95::SetLineSize(int lineSize
) 
 695     m_lineSize 
= lineSize
; 
 696     ::SendMessage( GetHwnd(), TBM_SETLINESIZE
, (WPARAM
) 0, (LPARAM
) lineSize 
); 
 699 int wxSlider95::GetLineSize() const 
 701     return (int) ::SendMessage( GetHwnd(), TBM_GETLINESIZE
, 
 702         (WPARAM
) 0, (LPARAM
) 0 ); 
 705 int wxSlider95::GetSelEnd() const 
 707     return (int) ::SendMessage( GetHwnd(), TBM_SETSELEND
, 
 708         (WPARAM
) 0, (LPARAM
) 0 ); 
 711 int wxSlider95::GetSelStart() const 
 713     return (int) ::SendMessage( GetHwnd(), TBM_GETSELSTART
, 
 714         (WPARAM
) 0, (LPARAM
) 0 ); 
 717 void wxSlider95::SetSelection(int minPos
, int maxPos
) 
 719     ::SendMessage(GetHwnd(), TBM_SETSEL
, 
 720         (WPARAM
) TRUE
, (LPARAM
) MAKELONG( minPos
, maxPos
) ); 
 723 void wxSlider95::SetThumbLength(int len
) 
 725     ::SendMessage( GetHwnd(), TBM_SETTHUMBLENGTH
, (WPARAM
) len
, (LPARAM
) 0 ); 
 728 int wxSlider95::GetThumbLength() const 
 730   return (int) ::SendMessage( GetHwnd(), TBM_GETTHUMBLENGTH
, 
 731       (WPARAM
) 0, (LPARAM
) 0 ); 
 734 void wxSlider95::SetTick(int tickPos
) 
 736   ::SendMessage( GetHwnd(), TBM_SETTIC
, (WPARAM
) 0, (LPARAM
) tickPos 
); 
 739 bool wxSlider95::ContainsHWND(WXHWND hWnd
) const 
 743         hWnd 
== GetStaticMin() 
 744         || hWnd 
== GetStaticMax() 
 745         || hWnd 
== GetEditValue() 
 749 void wxSlider95::Command (wxCommandEvent 
& event
) 
 751     SetValue (event
.GetInt()); 
 752     ProcessCommand (event
); 
 755 bool wxSlider95::Show(bool show
) 
 757     wxWindow::Show(show
); 
 766         ShowWindow((HWND
) m_staticValue
, (BOOL
)cshow
); 
 769         ShowWindow((HWND
) m_staticMin
, (BOOL
)cshow
); 
 772         ShowWindow((HWND
) m_staticMax
, (BOOL
)cshow
); 
 780 #endif // wxUSE_SLIDER