home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / src / os2 / slider.cpp < prev    next >
C/C++ Source or Header  |  2002-12-27  |  45KB  |  1,181 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        slider.cpp
  3. // Purpose:     wxSlider
  4. // Author:      David Webster
  5. // Modified by:
  6. // Created:     10/15/99
  7. // RCS-ID:      $Id: SLIDER.CPP,v 1.19.2.1 2002/12/27 14:49:35 JS Exp $
  8. // Copyright:   (c) David Webster
  9. // Licence:     wxWindows licence
  10. /////////////////////////////////////////////////////////////////////////////
  11.  
  12. // For compilers that support precompilation, includes "wx.h".
  13. #include "wx/wxprec.h"
  14.  
  15. #ifdef __BORLANDC__
  16. #pragma hdrstop
  17. #endif
  18.  
  19. #ifndef WX_PRECOMP
  20. #include <stdio.h>
  21. #include <wx/utils.h>
  22. #include <wx/brush.h>
  23. #include <wx/scrolwin.h>
  24. #endif
  25.  
  26. #include "wx/slider.h"
  27. #include "wx/os2/private.h"
  28.  
  29. IMPLEMENT_DYNAMIC_CLASS(wxSlider, wxControl)
  30.  
  31. wxSlider::wxSlider()
  32. {
  33.     m_hStaticValue = 0L;
  34.     m_hStaticMin   = 0L;
  35.     m_hStaticMax   = 0L;
  36.     m_nPageSize    = 1;
  37.     m_nLineSize    = 1;
  38.     m_nRangeMax    = 0;
  39.     m_nRangeMin    = 0;
  40.     m_nTickFreq    = 0;
  41. } // end of wxSlider::wxSlider
  42.  
  43. wxSlider::~wxSlider()
  44. {
  45.     if (m_hStaticMin)
  46.         ::WinDestroyWindow((HWND)m_hStaticMin);
  47.     if (m_hStaticMax)
  48.         ::WinDestroyWindow((HWND)m_hStaticMax);
  49.     if (m_hStaticValue)
  50.         ::WinDestroyWindow((HWND)m_hStaticValue);
  51. } // end of wxSlider::~wxSlider
  52.  
  53. void wxSlider::AdjustSubControls(
  54.   int                               nX
  55. , int                               nY
  56. , int                               nWidth
  57. , int                               nHeight
  58. , int                               nSizeFlags
  59. )
  60. {
  61.     SWP                             vSwp;
  62.     int                             nXOffset = nX;
  63.     int                             nYOffset = nY;
  64.     int                             nCx;     // slider,min,max sizes
  65.     int                             nCy;
  66.     int                             nCyf;
  67.     char                            zBuf[300];
  68.  
  69.     wxGetCharSize( GetHWND()
  70.                   ,&nCx
  71.                   ,&nCy
  72.                   ,&this->GetFont()
  73.                  );
  74.  
  75.     if ((m_windowStyle & wxSL_VERTICAL) != wxSL_VERTICAL)
  76.     {
  77.         if (m_windowStyle & wxSL_LABELS )
  78.         {
  79.             int                     nMinLen = 0;
  80.             int                     nMaxLen = 0;
  81.  
  82.             ::WinQueryWindowText((HWND)m_hStaticMin, 300, zBuf);
  83.             GetTextExtent(zBuf, &nMinLen, &nCyf, NULL, NULL, &this->GetFont());
  84.  
  85.             ::WinQueryWindowText((HWND)m_hStaticMax, 300, zBuf);
  86.             GetTextExtent(zBuf, &nMaxLen, &nCyf, NULL, NULL, &this->GetFont());
  87.  
  88.             if (m_hStaticValue)
  89.             {
  90.                 int                 nNewWidth = wxMax(nMinLen, nMaxLen);
  91.                 int                 nValueHeight = nCyf;
  92.  
  93.                 ::WinSetWindowPos( (HWND)m_hStaticValue
  94.                                   ,HWND_TOP
  95.                                   ,(LONG)nXOffset - (nNewWidth + nCx + nMinLen + nCx)
  96.                                   ,(LONG)nYOffset
  97.                                   ,(LONG)nNewWidth
  98.                                   ,(LONG)nValueHeight
  99.                                   ,SWP_SIZE | SWP_MOVE
  100.                                  );
  101.             }
  102.             ::WinSetWindowPos( (HWND)m_hStaticMin
  103.                               ,HWND_TOP
  104.                               ,(LONG)nXOffset - (nMinLen + nCx)
  105.                               ,(LONG)nYOffset
  106.                               ,(LONG)nMinLen
  107.                               ,(LONG)nCyf
  108.                               ,SWP_SIZE | SWP_MOVE
  109.                              );
  110.             nXOffset += nWidth + nCx;
  111.  
  112.             ::WinSetWindowPos( (HWND)m_hStaticMax
  113.                               ,HWND_TOP
  114.                               ,(LONG)nXOffset
  115.                               ,(LONG)nYOffset
  116.                               ,(LONG)nMaxLen
  117.                               ,(LONG)nCyf
  118.                               ,SWP_ZORDER | SWP_SHOW
  119.                              );
  120.         }
  121.     }
  122.     else
  123.     {
  124.         //
  125.         // Now deal with a vertical slider
  126.         //
  127.  
  128.         if (m_windowStyle & wxSL_LABELS )
  129.         {
  130.             int                     nMinLen = 0;
  131.             int                     nMaxLen = 0;
  132.  
  133.             ::WinQueryWindowText((HWND)m_hStaticMin, 300, zBuf);
  134.             GetTextExtent(zBuf, &nMinLen, &nCyf, NULL, NULL, &this->GetFont());
  135.  
  136.             ::WinQueryWindowText((HWND)m_hStaticMax, 300, zBuf);
  137.             GetTextExtent(zBuf, &nMaxLen, &nCyf, NULL, NULL, &this->GetFont());
  138.  
  139.             if (m_hStaticValue)
  140.             {
  141.                 int                 nNewWidth = (wxMax(nMinLen, nMaxLen));
  142.  
  143.                 ::WinSetWindowPos( (HWND)m_hStaticValue
  144.                                   ,HWND_TOP
  145.                                   ,(LONG)nXOffset
  146.                                   ,(LONG)nYOffset + nHeight + nCyf
  147.                                   ,(LONG)nNewWidth
  148.                                   ,(LONG)nCyf
  149.                                   ,SWP_SIZE | SWP_MOVE
  150.                                  );
  151.             }
  152.             ::WinSetWindowPos( (HWND)m_hStaticMax
  153.                               ,HWND_TOP
  154.                               ,(LONG)nXOffset
  155.                               ,(LONG)nYOffset + nHeight
  156.                               ,(LONG)nMaxLen
  157.                               ,(LONG)nCyf
  158.                               ,SWP_SIZE | SWP_MOVE
  159.                              );
  160.             ::WinSetWindowPos( (HWND)m_hStaticMin
  161.                               ,HWND_TOP
  162.                               ,(LONG)nXOffset
  163.                               ,(LONG)nYOffset - nCyf
  164.                               ,(LONG)nMinLen
  165.                               ,(LONG)nCyf
  166.                               ,SWP_SIZE | SWP_MOVE
  167.                              );
  168.         }
  169.     }
  170. } // end of wxSlider::AdjustSubControls
  171.  
  172. void wxSlider::ClearSel()
  173. {
  174. } // end of wxSlider::ClearSel
  175.  
  176. void wxSlider::ClearTicks()
  177. {
  178. } // end of wxSlider::ClearTicks
  179.  
  180. void wxSlider::Command (
  181.   wxCommandEvent&                   rEvent
  182. )
  183. {
  184.     SetValue(rEvent.GetInt());
  185.     ProcessCommand(rEvent);
  186. } // end of wxSlider::Command
  187.  
  188. bool wxSlider::ContainsHWND(
  189.   WXHWND                            hWnd
  190. ) const
  191. {
  192.     return ( hWnd == GetStaticMin() ||
  193.              hWnd == GetStaticMax() ||
  194.              hWnd == GetEditValue()
  195.            );
  196. } // end of wxSlider::ContainsHWND
  197.  
  198. bool wxSlider::Create(
  199.   wxWindow*                         pParent
  200. , wxWindowID                        vId
  201. , int                               nValue
  202. , int                               nMinValue
  203. , int                               nMaxValue
  204. , const wxPoint&                    rPos
  205. , const wxSize&                     rSize
  206. , long                              lStyle
  207. , const wxValidator&                rValidator
  208. , const wxString&                   rsName
  209. )
  210. {
  211.     int                             nX       = rPos.x;
  212.     int                             nY       = rPos.y;
  213.     int                             nWidth   = rSize.x;
  214.     int                             nHeight  = rSize.y;
  215.     long                            lMsStyle = 0L;
  216.     long                            lWstyle  = 0L;
  217.  
  218.     SetName(rsName);
  219. #if wxUSE_VALIDATORS
  220.     SetValidator(rValidator);
  221. #endif
  222.     if (pParent)
  223.         pParent->AddChild(this);
  224.     SetBackgroundColour(pParent->GetBackgroundColour()) ;
  225.     SetForegroundColour(pParent->GetForegroundColour()) ;
  226.  
  227.     m_hStaticValue = 0L;
  228.     m_hStaticMin   = 0L;
  229.     m_hStaticMax   = 0L;
  230.     m_nPageSize    = 1;
  231.     m_nLineSize    = 1;
  232.     m_windowStyle  = lStyle;
  233.     m_nTickFreq    = 0;
  234.  
  235.     if (vId == -1)
  236.         m_windowId = (int)NewControlId();
  237.     else
  238.         m_windowId = vId;
  239.  
  240.     if (m_windowStyle & wxCLIP_SIBLINGS )
  241.         lMsStyle |= WS_CLIPSIBLINGS;
  242.  
  243.     if (m_windowStyle & wxSL_LABELS)
  244.     {
  245.         lMsStyle |= WS_VISIBLE | SS_TEXT | DT_VCENTER;
  246.  
  247.         m_hStaticValue = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
  248.                                                    ,WC_STATIC                // Window class
  249.                                                    ,(PSZ)NULL                // Initial Text
  250.                                                    ,(ULONG)lMsStyle          // Style flags
  251.                                                    ,0L, 0L, 0L, 0L           // Origin -- 0 size
  252.                                                    ,(HWND)GetHwndOf(pParent) // owner window handle (same as parent
  253.                                                    ,HWND_TOP                 // initial z position
  254.                                                    ,(ULONG)NewControlId()    // Window identifier
  255.                                                    ,NULL                     // no control data
  256.                                                    ,NULL                     // no Presentation parameters
  257.                                                   );
  258.  
  259.         //
  260.         // Now create min static control
  261.         //
  262.         sprintf(wxBuffer, "%d", nMinValue);
  263.         lWstyle = SS_TEXT|DT_LEFT|WS_VISIBLE;
  264.         if (m_windowStyle & wxCLIP_SIBLINGS)
  265.             lWstyle |= WS_CLIPSIBLINGS;
  266.  
  267.         m_hStaticMin = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
  268.                                                  ,WC_STATIC                // Window class
  269.                                                  ,(PSZ)wxBuffer            // Initial Text
  270.                                                  ,(ULONG)lWstyle           // Style flags
  271.                                                  ,0L, 0L, 0L, 0L           // Origin -- 0 size
  272.                                                  ,(HWND)GetHwndOf(pParent) // owner window handle (same as parent
  273.                                                  ,HWND_TOP                 // initial z position
  274.                                                  ,(ULONG)NewControlId()    // Window identifier
  275.                                                  ,NULL                     // no control data
  276.                                                  ,NULL                     // no Presentation parameters
  277.                                                 );
  278.     }
  279.     lMsStyle = 0;
  280.  
  281.     SLDCDATA                        vSlData;
  282.  
  283.     vSlData.cbSize = sizeof(SLDCDATA);
  284.     if (m_windowStyle & wxSL_VERTICAL)
  285.         lMsStyle = SLS_VERTICAL | SLS_HOMEBOTTOM | WS_VISIBLE | WS_TABSTOP;
  286.     else
  287.         lMsStyle = SLS_HORIZONTAL | SLS_HOMELEFT | WS_VISIBLE | WS_TABSTOP;
  288.  
  289.     if (m_windowStyle & wxCLIP_SIBLINGS)
  290.         lMsStyle |= WS_CLIPSIBLINGS;
  291.  
  292.     if (m_windowStyle & wxSL_AUTOTICKS)
  293.     {
  294.         vSlData.usScale1Spacing = 0;
  295.         vSlData.usScale2Spacing = 0;
  296.     }
  297.  
  298.     if (m_windowStyle & wxSL_LEFT)
  299.         lMsStyle |= SLS_PRIMARYSCALE2; // if SLS_VERTICAL then SCALE2 is to the left
  300.     else if (m_windowStyle & wxSL_RIGHT)
  301.         lMsStyle |= SLS_PRIMARYSCALE1; // if SLS_VERTICAL then SCALE2 is to the right
  302.     else if (m_windowStyle & wxSL_TOP)
  303.         lMsStyle |= SLS_PRIMARYSCALE1; // if SLS_HORIZONTAL then SCALE1 is to the top
  304.     else if (m_windowStyle & wxSL_BOTTOM )
  305.         lMsStyle |= SLS_PRIMARYSCALE2; // if SLS_HORIZONTAL then SCALE1 is to the bottom
  306.     else if ( m_windowStyle & wxSL_BOTH )
  307.         lMsStyle |= SLS_PRIMARYSCALE1 | SLS_PRIMARYSCALE2;
  308.     else
  309.         lMsStyle |= SLS_PRIMARYSCALE2;
  310.     lMsStyle |= SLS_RIBBONSTRIP;
  311.  
  312.     m_nPageSize = ((nMaxValue - nMinValue)/10);
  313.     vSlData.usScale1Increments = m_nPageSize;
  314.     vSlData.usScale2Increments = m_nPageSize;
  315.  
  316.     HWND                            hScrollBar = ::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
  317.                                                                    ,WC_SLIDER                // Window class
  318.                                                                    ,(PSZ)wxBuffer            // Initial Text
  319.                                                                    ,(ULONG)lMsStyle          // Style flags
  320.                                                                    ,0L, 0L, 0L, 0L           // Origin -- 0 size
  321.                                                                    ,(HWND)GetHwndOf(pParent) // owner window handle (same as parent
  322.                                                                    ,HWND_BOTTOM                 // initial z position
  323.                                                                    ,(HMENU)m_windowId       // Window identifier
  324.                                                                    ,&vSlData                 // Slider control data
  325.                                                                    ,NULL                     // no Presentation parameters
  326.                                                                   );
  327.     m_nRangeMax = nMaxValue;
  328.     m_nRangeMin = nMinValue;
  329.  
  330.     //
  331.     // Set the size of the ticks ... default to 6 pixels
  332.     //
  333.     ::WinSendMsg( hScrollBar
  334.                  ,SLM_SETTICKSIZE
  335.                  ,MPFROM2SHORT(SMA_SETALLTICKS, (USHORT)12)
  336.                  ,NULL
  337.                 );
  338.     //
  339.     // Set the position to the initial value
  340.     //
  341.     ::WinSendMsg( hScrollBar
  342.                  ,SLM_SETSLIDERINFO
  343.                  ,MPFROM2SHORT(SMA_SLIDERARMPOSITION, SMA_RANGEVALUE)
  344.                  ,(MPARAM)nValue
  345.                 );
  346.  
  347.     m_hWnd = (WXHWND)hScrollBar;
  348.     SubclassWin(GetHWND());
  349.     ::WinSetWindowText((HWND)m_hWnd, "");
  350.  
  351.     SetFont(*wxSMALL_FONT);
  352.     if (m_windowStyle & wxSL_LABELS)
  353.     {
  354.         //
  355.         // Finally, create max value static item
  356.         //
  357.         sprintf(wxBuffer, "%d", nMaxValue);
  358.         lWstyle = SS_TEXT|DT_LEFT|WS_VISIBLE;
  359.         if (m_windowStyle & wxCLIP_SIBLINGS)
  360.             lMsStyle |= WS_CLIPSIBLINGS;
  361.  
  362.         m_hStaticMax = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
  363.                                                  ,WC_STATIC                // Window class
  364.                                                  ,(PSZ)wxBuffer            // Initial Text
  365.                                                  ,(ULONG)lWstyle           // Style flags
  366.                                                  ,0L, 0L, 0L, 0L           // Origin -- 0 size
  367.                                                  ,(HWND)GetHwndOf(pParent) // owner window handle (same as parent
  368.                                                  ,HWND_TOP                 // initial z position
  369.                                                  ,(ULONG)NewControlId()    // Window identifier
  370.                                                  ,NULL                     // no control data
  371.                                                  ,NULL                     // no Presentation parameters
  372.                                                 );
  373.         if (GetFont().Ok())
  374.         {
  375.             if (GetFont().GetResourceHandle())
  376.             {
  377.                 if (m_hStaticMin)
  378.                     wxOS2SetFont( m_hStaticMin
  379.                                  ,GetFont()
  380.                                 );
  381.                 if (m_hStaticMax)
  382.                     wxOS2SetFont( m_hStaticMax
  383.                                  ,GetFont()
  384.                                 );
  385.                 if (m_hStaticValue)
  386.                     wxOS2SetFont( m_hStaticValue
  387.                                  ,GetFont()
  388.                                 );
  389.             }
  390.         }
  391.     }
  392.  
  393.     SetXComp(0);
  394.     SetYComp(0);
  395.     SetSize( nX
  396.             ,nY
  397.             ,nWidth
  398.             ,nHeight
  399.            );
  400.     m_nThumbLength = SHORT1FROMMR(::WinSendMsg( GetHwnd()
  401.                                                ,SLM_QUERYSLIDERINFO
  402.                                                ,MPFROM2SHORT( SMA_SLIDERARMDIMENSIONS
  403.                                                              ,SMA_RANGEVALUE
  404.                                                             )
  405.                                                ,(MPARAM)0
  406.                                               )
  407.                                  ) + 4; // for bordersizes
  408.  
  409.     wxColour                        vColour;
  410.  
  411.     vColour.Set(wxString("BLACK"));
  412.  
  413.     LONG                            lColor = (LONG)vColour.GetPixel();
  414.  
  415.     ::WinSetPresParam( m_hStaticMin
  416.                       ,PP_FOREGROUNDCOLOR
  417.                       ,sizeof(LONG)
  418.                       ,(PVOID)&lColor
  419.                      );
  420.     ::WinSetPresParam( m_hStaticMax
  421.                       ,PP_FOREGROUNDCOLOR
  422.                       ,sizeof(LONG)
  423.                       ,(PVOID)&lColor
  424.                      );
  425.     ::WinSetPresParam( m_hStaticValue
  426.                       ,PP_FOREGROUNDCOLOR
  427.                       ,sizeof(LONG)
  428.                       ,(PVOID)&lColor
  429.                      );
  430.     ::WinSetPresParam( m_hWnd
  431.                       ,PP_FOREGROUNDCOLOR
  432.                       ,sizeof(LONG)
  433.                       ,(PVOID)&lColor
  434.                      );
  435.     lColor = (LONG)m_backgroundColour.GetPixel();
  436.     ::WinSetPresParam( m_hStaticMin
  437.                       ,PP_BACKGROUNDCOLOR
  438.                       ,sizeof(LONG)
  439.                       ,(PVOID)&lColor
  440.                      );
  441.     ::WinSetPresParam( m_hStaticMax
  442.                       ,PP_BACKGROUNDCOLOR
  443.                       ,sizeof(LONG)
  444.                       ,(PVOID)&lColor
  445.                      );
  446.     ::WinSetPresParam( m_hStaticValue
  447.                       ,PP_BACKGROUNDCOLOR
  448.                       ,sizeof(LONG)
  449.                       ,(PVOID)&lColor
  450.                      );
  451.     ::WinSetPresParam( m_hWnd
  452.                       ,PP_BACKGROUNDCOLOR
  453.                       ,sizeof(LONG)
  454.                       ,(PVOID)&lColor
  455.                      );
  456.     vColour.Set(wxString("BLUE"));
  457.     lColor = (LONG)vColour.GetPixel();
  458.     ::WinSetPresParam( m_hWnd
  459.                       ,PP_HILITEBACKGROUNDCOLOR
  460.                       ,sizeof(LONG)
  461.                       ,(PVOID)&lColor
  462.                      );
  463.     SetValue(nValue);
  464.     return TRUE;
  465. } // end of wxSlider::Create
  466.  
  467. void wxSlider::DoSetSize(
  468.   int                               nX
  469. , int                               nY
  470. , int                               nWidth
  471. , int                               nHeight
  472. , int                               nSizeFlags
  473. )
  474. {
  475.     int                             nX1      = nX;
  476.     int                             nY1      = nY;
  477.     int                             nWidth1  = nWidth;
  478.     int                             nHeight1 = nHeight;
  479.     int                             nXOffset = nX;
  480.     int                             nYOffset = nY;
  481.     int                             nCx;     // slider,min,max sizes
  482.     int                             nCy;
  483.     int                             nCyf;
  484.     int                             nCurrentX;
  485.     int                             nCurrentY;
  486.     char                            zBuf[300];
  487.  
  488.     //
  489.     // Adjust for OS/2's reverse coordinate system
  490.     //
  491.     wxWindowOS2*                    pParent = (wxWindowOS2*)GetParent();
  492.     int                             nUsedHeight = 0;
  493.     int                             nOS2Height = nHeight;
  494.  
  495.     if (nOS2Height < 0)
  496.         nOS2Height = 20;
  497.  
  498.     if (pParent)
  499.     {
  500.         int                         nOS2ParentHeight = GetOS2ParentHeight(pParent);
  501.  
  502.         nYOffset = nOS2ParentHeight - (nYOffset + nOS2Height);
  503.         if (nY != -1)
  504.             nY1 = nOS2ParentHeight - (nY1 + nOS2Height);
  505.     }
  506.     else
  507.     {
  508.         RECTL                       vRect;
  509.  
  510.         ::WinQueryWindowRect(HWND_DESKTOP, &vRect);
  511.         nYOffset = vRect.yTop - (nYOffset + nOS2Height);
  512.         if (nY != -1)
  513.             nY1 = vRect.yTop - (nY1 + nOS2Height);
  514.     }
  515.     m_nSizeFlags = nSizeFlags;
  516.  
  517.     GetPosition( &nCurrentX
  518.                 ,&nCurrentY
  519.                );
  520.     if (nX == -1 && !(nSizeFlags & wxSIZE_ALLOW_MINUS_ONE))
  521.         nX1 = nCurrentX;
  522.     if (nY == -1 && !(nSizeFlags & wxSIZE_ALLOW_MINUS_ONE))
  523.         nY1 = nCurrentY;
  524.  
  525.     AdjustForParentClientOrigin( nX1
  526.                                 ,nY1
  527.                                 ,nSizeFlags
  528.                                );
  529.     wxGetCharSize( GetHWND()
  530.                   ,&nCx
  531.                   ,&nCy
  532.                   ,&this->GetFont()
  533.                  );
  534.  
  535.     if ((m_windowStyle & wxSL_VERTICAL) != wxSL_VERTICAL)
  536.     {
  537.         if (m_windowStyle & wxSL_LABELS )
  538.         {
  539.             int                  nMinLen = 0;
  540.             int                  nMaxLen = 0;
  541.  
  542.             ::WinQueryWindowText((HWND)m_hStaticMin, 300, zBuf);
  543.             GetTextExtent(zBuf, &nMinLen, &nCyf, NULL, NULL, &this->GetFont());
  544.             ::WinQueryWindowText((HWND)m_hStaticMax, 300, zBuf);
  545.             GetTextExtent(zBuf, &nMaxLen, &nCyf, NULL, NULL, &this->GetFont());
  546.  
  547.             if (m_hStaticValue)
  548.             {
  549.                 int              nNewWidth = (wxMax(nMinLen, nMaxLen));
  550.                 int              nValueHeight = nCyf;
  551.  
  552.                 ::WinSetWindowPos( (HWND)m_hStaticValue
  553.                                   ,HWND_TOP
  554.                                   ,(LONG)nXOffset
  555.                                   ,(LONG)nYOffset - (nCyf * 1.2)
  556.                                   ,(LONG)nNewWidth
  557.                                   ,(LONG)nValueHeight
  558.                                   ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW
  559.                                  );
  560.                 nXOffset += nNewWidth + nCx;
  561.             }
  562.             ::WinSetWindowPos( (HWND)m_hStaticMin
  563.                               ,HWND_TOP
  564.                               ,(LONG)nXOffset
  565.                               ,(LONG)nYOffset - (nCyf * 1.2)
  566.                               ,(LONG)nMinLen
  567.                               ,(LONG)nCy
  568.                               ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW
  569.                              );
  570.             nXOffset += nMinLen + nCx;
  571.  
  572.             int                  nSliderLength = nWidth1 - nXOffset - nMaxLen - nCx;
  573.             int                  nSliderHeight = nHeight1;
  574.  
  575.             if (nSliderHeight < 0)
  576.                 nSliderHeight = 20;
  577.  
  578.             //
  579.             // Slider must have a minimum/default length/height
  580.             //
  581.             if (nSliderLength < 100)
  582.                 nSliderLength = 100;
  583.  
  584.             ::WinSetWindowPos( GetHwnd()
  585.                               ,HWND_TOP
  586.                               ,(LONG)nXOffset
  587.                               ,(LONG)nYOffset
  588.                               ,(LONG)nSliderLength
  589.                               ,(LONG)nSliderHeight
  590.                               ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW
  591.                              );
  592.             ::WinQueryWindowPos(GetHwnd(), GetSwp());
  593.             ::WinSendMsg( GetHwnd()
  594.                          ,SLM_SETSLIDERINFO
  595.                          ,MPFROM2SHORT( SMA_SHAFTDIMENSIONS
  596.                                        ,0
  597.                                       )
  598.                          ,MPFROMLONG((ULONG)(nSliderHeight/2))
  599.                         );
  600.             nXOffset += nSliderLength + nCx;
  601.  
  602.             ::WinSetWindowPos( (HWND)m_hStaticMax
  603.                               ,HWND_TOP
  604.                               ,(LONG)nXOffset
  605.                               ,(LONG)nYOffset - (nCyf * 1.2)
  606.                               ,(LONG)nMaxLen
  607.                               ,(LONG)nCy
  608.                               ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW
  609.                              );
  610.         }
  611.         else
  612.         {
  613.             //
  614.             // No labels
  615.             // If we're prepared to use the existing size, then...
  616.             //
  617.             if (nWidth == -1 && nHeight == -1 &&
  618.                 ((nSizeFlags & wxSIZE_AUTO) != wxSIZE_AUTO))
  619.             {
  620.                 GetSize( &nWidth1
  621.                         ,&nHeight1
  622.                        );
  623.             }
  624.             if (nWidth1 < 0)
  625.                 nWidth1 = 200;
  626.             if (nHeight1 < 0)
  627.                 nHeight1 = 20;
  628.             ::WinSetWindowPos( GetHwnd()
  629.                               ,HWND_TOP
  630.                               ,(LONG)nX1
  631.                               ,(LONG)nY1
  632.                               ,(LONG)nWidth1
  633.                               ,(LONG)nHeight1
  634.                               ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW
  635.                              );
  636.         }
  637.     }
  638.  
  639.     //
  640.     // Now deal with a vertical slider
  641.     //
  642.     else
  643.     {
  644.         if (m_windowStyle & wxSL_LABELS )
  645.         {
  646.             int                  nMinLen;
  647.             int                  nMaxLen;
  648.  
  649.             ::WinQueryWindowText((HWND)m_hStaticMin, 300, zBuf);
  650.             GetTextExtent(zBuf, &nMinLen, &nCyf, NULL, NULL, &this->GetFont());
  651.             ::WinQueryWindowText((HWND)m_hStaticMax, 300, zBuf);
  652.             GetTextExtent(zBuf, &nMaxLen, &nCyf, NULL, NULL, &this->GetFont());
  653.             if (m_hStaticValue)
  654.             {
  655.                 int              nNewWidth = wxMax(nMinLen, nMaxLen);
  656.                 int              nValueHeight = nCyf;
  657.  
  658.                 ::WinSetWindowPos( (HWND)m_hStaticValue
  659.                                   ,HWND_TOP
  660.                                   ,(LONG)nXOffset
  661.                                   ,(LONG)nYOffset + nHeight
  662.                                   ,(LONG)nNewWidth
  663.                                   ,(LONG)nValueHeight
  664.                                   ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW
  665.                                  );
  666.                 nUsedHeight += nCyf;
  667.             }
  668.             ::WinSetWindowPos( (HWND)m_hStaticMin
  669.                               ,HWND_TOP
  670.                               ,(LONG)nXOffset
  671.                               ,(LONG)nYOffset + nHeight - nCyf
  672.                               ,(LONG)nMinLen
  673.                               ,(LONG)nCy
  674.                               ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW
  675.                              );
  676.             nUsedHeight += nCy;
  677.  
  678.             int                  nSliderLength = nHeight1 - (nUsedHeight + (2 * nCy));
  679.             int                  nSliderWidth  = nWidth1;
  680.  
  681.             if (nSliderWidth < 0)
  682.                 nSliderWidth = 20;
  683.  
  684.             //
  685.             // Slider must have a minimum/default length
  686.             //
  687.             if (nSliderLength < 100)
  688.                 nSliderLength = 100;
  689.  
  690.             ::WinSetWindowPos( GetHwnd()
  691.                               ,HWND_TOP
  692.                               ,(LONG)nXOffset
  693.                               ,(LONG)nYOffset + nCyf
  694.                               ,(LONG)nSliderWidth
  695.                               ,(LONG)nSliderLength
  696.                               ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW
  697.                              );
  698.             ::WinQueryWindowPos(GetHwnd(), GetSwp());
  699.             ::WinSendMsg( GetHwnd()
  700.                          ,SLM_SETSLIDERINFO
  701.                          ,MPFROM2SHORT( SMA_SHAFTDIMENSIONS
  702.                                        ,0
  703.                                       )
  704.                          ,MPFROMLONG((ULONG)(nSliderWidth/2))
  705.                         );
  706.             nUsedHeight += nSliderLength;
  707.             ::WinSetWindowPos( (HWND)m_hStaticMax
  708.                               ,HWND_TOP
  709.                               ,(LONG)nXOffset
  710.                               ,(LONG)nYOffset - nCyf
  711.                               ,(LONG)nMaxLen
  712.                               ,(LONG)nCy
  713.                               ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW
  714.                              );
  715.         }
  716.         else
  717.         {
  718.             //
  719.             // No labels
  720.             // If we're prepared to use the existing size, then...
  721.             //
  722.             if (nWidth == -1 && nHeight == -1 &&
  723.                 ((nSizeFlags & wxSIZE_AUTO) != wxSIZE_AUTO))
  724.             {
  725.                 GetSize( &nWidth1
  726.                         ,&nHeight1
  727.                        );
  728.             }
  729.             if (nWidth1 < 0)
  730.                 nWidth1 = 20;
  731.             if (nHeight1 < 0)
  732.                 nHeight1 = 200;
  733.             ::WinSetWindowPos( GetHwnd()
  734.                               ,HWND_TOP
  735.                               ,(LONG)nX1
  736.                               ,(LONG)nY1
  737.                               ,(LONG)nWidth1
  738.                               ,(LONG)nHeight1
  739.                               ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW
  740.                              );
  741.         }
  742.     }
  743. } // end of void wxSlider::DoSetSize
  744.  
  745. int wxSlider::GetLineSize() const
  746. {
  747.     return 1;
  748. } // end of wxSlider::GetLineSize
  749.  
  750. int wxSlider::GetPageSize() const
  751. {
  752.     return m_nPageSize;
  753. } // end of wxSlider::GetPageSize
  754.  
  755. void wxSlider::GetPosition(
  756.   int*                              pnX
  757. , int*                              pnY
  758. ) const
  759. {
  760.     wxWindowOS2*                    pParent = GetParent();
  761.     RECTL                           vRect;
  762.  
  763.     vRect.xLeft   = -1;
  764.     vRect.xRight  = -1;
  765.     vRect.yTop    = -1;
  766.     vRect.yBottom = -1;
  767.     wxFindMaxSize( GetHWND()
  768.                   ,&vRect
  769.                  );
  770.  
  771.     if (m_hStaticMin)
  772.         wxFindMaxSize( m_hStaticMin
  773.                       ,&vRect
  774.                      );
  775.     if (m_hStaticMax)
  776.         wxFindMaxSize( m_hStaticMax
  777.                       ,&vRect
  778.                      );
  779.     if (m_hStaticValue)
  780.         wxFindMaxSize( m_hStaticValue
  781.                       ,&vRect
  782.                      );
  783.  
  784.     //
  785.     // Since we now have the absolute screen coords,
  786.     // if there's a parent we must subtract its top left corner
  787.     //
  788.     POINTL                          vPoint;
  789.  
  790.     vPoint.x = vRect.xLeft;
  791.     vPoint.y = vRect.yTop;
  792.  
  793.     if (pParent)
  794.     {
  795.         SWP                             vSwp;
  796.  
  797.         ::WinQueryWindowPos((HWND)pParent->GetHWND(), &vSwp);
  798.         vPoint.x = vSwp.x;
  799.         vPoint.y = vSwp.y;
  800.     }
  801.  
  802.     //
  803.     // We may be faking the client origin.
  804.     // So a window that's really at (0, 30) may appear
  805.     // (to wxWin apps) to be at (0, 0).
  806.     //
  807.     if (GetParent())
  808.     {
  809.         wxPoint                     vPt(GetParent()->GetClientAreaOrigin());
  810.  
  811.         vPoint.x -= vPt.x;
  812.         vPoint.y -= vPt.y;
  813.     }
  814.     *pnX = vPoint.x;
  815.     *pnY = vPoint.y;
  816. } // end of wxSlider::GetPosition
  817.  
  818. int wxSlider::GetSelEnd() const
  819. {
  820.     return 0;
  821. } // end of wxSlider::GetSelEnd
  822.  
  823. int wxSlider::GetSelStart() const
  824. {
  825.     return 0;
  826. } // end of wxSlider::GetSelStart
  827.  
  828. void wxSlider::DoGetSize(
  829.   int*                              pnWidth
  830. , int*                              pnHeight
  831. ) const
  832. {
  833.     GetSize( pnWidth
  834.             ,pnHeight
  835.            );
  836. } // end of wxSlider::DoGetSize
  837.  
  838. void wxSlider::GetSize(
  839.   int*                              pnWidth
  840. , int*                              pnHeight
  841. ) const
  842. {
  843.     RECTL                           vRect;
  844.  
  845.     vRect.xLeft   = -1;
  846.     vRect.xRight  = -1;
  847.     vRect.yTop    = -1;
  848.     vRect.yBottom = -1;
  849.  
  850.     wxFindMaxSize( GetHWND()
  851.                   ,&vRect
  852.                  );
  853.  
  854.     if (m_hStaticMin)
  855.         wxFindMaxSize( m_hStaticMin
  856.                       ,&vRect
  857.                      );
  858.     if (m_hStaticMax)
  859.         wxFindMaxSize( m_hStaticMax
  860.                       ,&vRect
  861.                      );
  862.     if (m_hStaticValue)
  863.         wxFindMaxSize( m_hStaticValue
  864.                       ,&vRect
  865.                      );
  866.     *pnWidth  = vRect.xRight - vRect.xLeft;
  867.     *pnHeight = vRect.yBottom - vRect.yTop;
  868. } // end of wxSlider::GetSize
  869.  
  870. int wxSlider::GetThumbLength() const
  871. {
  872.     return m_nThumbLength;
  873. } // end of wxSlider::GetThumbLength
  874.  
  875. int wxSlider::GetValue() const
  876. {
  877.     int                             nPixelRange = SHORT1FROMMR(::WinSendMsg( GetHwnd()
  878.                                                                             ,SLM_QUERYSLIDERINFO
  879.                                                                             ,MPFROM2SHORT( SMA_SHAFTDIMENSIONS
  880.                                                                                           ,SMA_RANGEVALUE
  881.                                                                                          )
  882.                                                                             ,(MPARAM)0
  883.                                                                            )
  884.                                                               );
  885.     double                          dPixelToRange = (double)(nPixelRange - m_nThumbLength)/(double)(m_nRangeMax - m_nRangeMin);
  886.     int                             nNewPos = 0;
  887.     int                             nPixelPos = SHORT1FROMMR(::WinSendMsg( GetHwnd()
  888.                                                                           ,SLM_QUERYSLIDERINFO
  889.                                                                           ,MPFROM2SHORT( SMA_SLIDERARMPOSITION
  890.                                                                                         ,SMA_RANGEVALUE
  891.                                                                                        )
  892.                                                                           ,(MPARAM)0
  893.                                                                          )
  894.                                                             );
  895.     nNewPos = (int)(nPixelPos/dPixelToRange);
  896.     if (nNewPos > (m_nRangeMax - m_nRangeMin)/2)
  897.         nNewPos++;
  898.     return nNewPos;
  899. } // end of wxSlider::GetValue
  900.  
  901. WXHBRUSH wxSlider::OnCtlColor(
  902.   WXHDC                             hDC
  903. , WXHWND                            hWnd
  904. , WXUINT                            uCtlColor
  905. , WXUINT                            uMessage
  906. , WXWPARAM                          wParam
  907. , WXLPARAM                          lParam
  908. )
  909. {
  910.     return (wxControl::OnCtlColor( hDC
  911.                                   ,hWnd
  912.                                   ,uCtlColor
  913.                                   ,uMessage
  914.                                   ,wParam
  915.                                   ,lParam
  916.                                  )
  917.            );
  918. } // end of wxSlider::OnCtlColor
  919.  
  920. bool wxSlider::OS2OnScroll(
  921.   int                               WXUNUSED(nOrientation)
  922. , WXWORD                            wParam
  923. , WXWORD                            wPos
  924. , WXHWND                            hControl
  925. )
  926. {
  927.     wxEventType                     eScrollEvent = wxEVT_NULL;
  928.  
  929.     switch (wParam)
  930.     {
  931.         case SLN_CHANGE:
  932.             if (m_windowStyle & wxSL_TOP)
  933.                 eScrollEvent = wxEVT_SCROLL_TOP;
  934.             else if (m_windowStyle & wxSL_BOTTOM)
  935.                 eScrollEvent = wxEVT_SCROLL_BOTTOM;
  936.             break;
  937.  
  938.         case SLN_SLIDERTRACK:
  939.             eScrollEvent = wxEVT_SCROLL_THUMBTRACK;
  940.             break;
  941.  
  942.         default:
  943.             return FALSE;
  944.     }
  945.  
  946.     int                             nPixelRange = SHORT1FROMMR(::WinSendMsg( GetHwnd()
  947.                                                                             ,SLM_QUERYSLIDERINFO
  948.                                                                             ,MPFROM2SHORT( SMA_SHAFTDIMENSIONS
  949.                                                                                           ,SMA_RANGEVALUE
  950.                                                                                          )
  951.                                                                             ,(MPARAM)0
  952.                                                                            )
  953.                                                               );
  954.     m_dPixelToRange = (double)(nPixelRange - m_nThumbLength)/(double)(m_nRangeMax - m_nRangeMin);
  955.     int                             nNewPos = 0;
  956.     int                             nPixelPos = SHORT1FROMMR(::WinSendMsg( GetHwnd()
  957.                                                                           ,SLM_QUERYSLIDERINFO
  958.                                                                           ,MPFROM2SHORT( SMA_SLIDERARMPOSITION
  959.                                                                                         ,SMA_RANGEVALUE
  960.                                                                                        )
  961.                                                                           ,(MPARAM)0
  962.                                                                          )
  963.                                                             );
  964.     nNewPos = (nPixelPos/m_dPixelToRange);
  965.     if (nNewPos > (m_nRangeMax - m_nRangeMin)/2)
  966.         nNewPos++;
  967.     if ((nNewPos < GetMin()) || (nNewPos > GetMax()))
  968.     {
  969.         //
  970.         // Out of range - but we did process it
  971.         //
  972.         return TRUE;
  973.     }
  974.     SetValue(nNewPos);
  975.  
  976.     wxScrollEvent                   vEvent( eScrollEvent
  977.                                            ,m_windowId
  978.                                           );
  979.  
  980.     vEvent.SetPosition(nNewPos);
  981.     vEvent.SetEventObject(this);
  982.     GetEventHandler()->ProcessEvent(vEvent);
  983.  
  984.     wxCommandEvent                  vCevent( wxEVT_COMMAND_SLIDER_UPDATED
  985.                                             ,GetId()
  986.                                            );
  987.  
  988.     vCevent.SetInt(nNewPos);
  989.     vCevent.SetEventObject(this);
  990.     return (GetEventHandler()->ProcessEvent(vCevent));
  991. } // end of wxSlider::OS2OnScroll
  992.  
  993. void wxSlider::SetLineSize(
  994.   int                               nLineSize
  995. )
  996. {
  997.     m_nLineSize = nLineSize;
  998. } // end of wxSlider::SetLineSize
  999.  
  1000.  
  1001. void wxSlider::SetPageSize(
  1002.   int                               nPageSize
  1003. )
  1004. {
  1005.     m_nPageSize = nPageSize;
  1006. } // end of wxSlider::SetPageSize
  1007.  
  1008. void wxSlider::SetRange(
  1009.   int                               nMinValue
  1010. , int                               nMaxValue
  1011. )
  1012. {
  1013.     wxChar                          zBuf[10];
  1014.  
  1015.     m_nRangeMin = nMinValue;
  1016.     m_nRangeMax = nMaxValue;
  1017.  
  1018.     int                             nPixelRange = SHORT1FROMMR(::WinSendMsg( GetHwnd()
  1019.                                                                             ,SLM_QUERYSLIDERINFO
  1020.                                                                             ,MPFROM2SHORT( SMA_SHAFTDIMENSIONS
  1021.                                                                                           ,SMA_RANGEVALUE
  1022.                                                                                          )
  1023.                                                                             ,(MPARAM)0
  1024.                                                                            )
  1025.                                                               );
  1026.     m_dPixelToRange = (double)(nPixelRange - m_nThumbLength)/(double)(m_nRangeMax - m_nRangeMin);
  1027.     if (m_hStaticMin)
  1028.     {
  1029.         wxSprintf(zBuf, wxT("%d"), m_nRangeMin);
  1030.         ::WinSetWindowText((HWND)m_hStaticMin, zBuf);
  1031.     }
  1032.  
  1033.     if (m_hStaticMax)
  1034.     {
  1035.         wxSprintf(zBuf, wxT("%d"), m_nRangeMax);
  1036.         ::WinSetWindowText((HWND)m_hStaticMax, zBuf);
  1037.     }
  1038. } // end of wxSlider::SetRange
  1039.  
  1040. void wxSlider::SetSelection(
  1041.   int                               WXUNUSED(nMinPos)
  1042. , int                               WXUNUSED(nMaxPos)
  1043. )
  1044. {
  1045. } // end of wxSlider::SetSelection
  1046.  
  1047. void wxSlider::SetThumbLength(
  1048.   int                               nLen
  1049. )
  1050. {
  1051.     int                             nBreadth;
  1052.  
  1053.     m_nThumbLength = SHORT1FROMMR(::WinSendMsg( GetHwnd()
  1054.                                                ,SLM_QUERYSLIDERINFO
  1055.                                                ,MPFROM2SHORT( SMA_SLIDERARMDIMENSIONS
  1056.                                                              ,SMA_RANGEVALUE
  1057.                                                             )
  1058.                                                ,(MPARAM)0
  1059.                                               )
  1060.                                  ) + 4; // for bordersizes
  1061.     nBreadth = SHORT2FROMMR(::WinSendMsg( GetHwnd()
  1062.                                          ,SLM_QUERYSLIDERINFO
  1063.                                          ,MPFROM2SHORT( SMA_SLIDERARMDIMENSIONS
  1064.                                                        ,SMA_RANGEVALUE
  1065.                                                       )
  1066.                                          ,(MPARAM)0
  1067.                                         )
  1068.                            );
  1069.     ::WinSendMsg( GetHwnd()
  1070.                  ,SLM_SETSLIDERINFO
  1071.                  ,MPFROM2SHORT( SMA_SLIDERARMDIMENSIONS
  1072.                                ,SMA_RANGEVALUE
  1073.                               )
  1074.                  ,MPFROM2SHORT(nLen, nBreadth)
  1075.                 );
  1076.     m_nThumbLength = nLen + 4; // Borders
  1077. } // end of wxSlider::SetThumbLength
  1078.  
  1079. void wxSlider::SetTick(
  1080.   int                               nTickPos
  1081. )
  1082. {
  1083.     nTickPos *= m_dPixelToRange;
  1084.     ::WinSendMsg( GetHwnd()
  1085.                  ,SLM_ADDDETENT
  1086.                  ,MPFROMSHORT(nTickPos)
  1087.                  ,NULL
  1088.                 );
  1089. } // end of wxSlider::SetTick
  1090.  
  1091. // For trackbars only
  1092. void wxSlider::SetTickFreq(
  1093.   int                               n
  1094. , int                               nPos
  1095. )
  1096. {
  1097.     SLDCDATA                        vSlData;
  1098.     WNDPARAMS                       vWndParams;
  1099.     int                             nPixelPos;
  1100.     int                             i;
  1101.  
  1102.     vSlData.cbSize = sizeof(SLDCDATA);
  1103.     if (m_windowStyle & wxSL_AUTOTICKS)
  1104.     {
  1105.         vSlData.usScale1Spacing = 0;
  1106.         vSlData.usScale2Spacing = 0;
  1107.     }
  1108.     vSlData.usScale1Increments = (m_nRangeMax - m_nRangeMin)/n;
  1109.     vSlData.usScale2Increments = (m_nRangeMax - m_nRangeMin)/n;
  1110.  
  1111.     vWndParams.fsStatus = WPM_CTLDATA;
  1112.     vWndParams.cchText  = 0L;
  1113.     vWndParams.pszText  = NULL;
  1114.     vWndParams.cbPresParams = 0L;
  1115.     vWndParams.pPresParams = NULL;
  1116.     vWndParams.cbCtlData = vSlData.cbSize;
  1117.     vWndParams.pCtlData = (PVOID)&vSlData;
  1118.     ::WinSendMsg(GetHwnd(), WM_SETWINDOWPARAMS, (MPARAM)&vWndParams, (MPARAM)0);
  1119.     for (i = 1; i < (m_nRangeMax - m_nRangeMin)/n; i++)
  1120.     {
  1121.         nPixelPos = i * n * m_dPixelToRange;
  1122.         ::WinSendMsg( GetHwnd()
  1123.                      ,SLM_ADDDETENT
  1124.                      ,MPFROMSHORT(nPixelPos)
  1125.                      ,NULL
  1126.                     );
  1127.     }
  1128. } // end of wxSlider::SetTickFreq
  1129.  
  1130. void wxSlider::SetValue(
  1131.   int                               nValue
  1132. )
  1133. {
  1134.     int                             nPixelPos = SHORT1FROMMR(::WinSendMsg( GetHwnd()
  1135.                                                                           ,SLM_QUERYSLIDERINFO
  1136.                                                                           ,MPFROM2SHORT( SMA_SLIDERARMPOSITION
  1137.                                                                                         ,SMA_RANGEVALUE
  1138.                                                                                        )
  1139.                                                                           ,(MPARAM)0
  1140.                                                                          )
  1141.                                                             );
  1142.     int                             nPixelRange = SHORT1FROMMR(::WinSendMsg( GetHwnd()
  1143.                                                                             ,SLM_QUERYSLIDERINFO
  1144.                                                                             ,MPFROM2SHORT( SMA_SHAFTDIMENSIONS
  1145.                                                                                           ,SMA_RANGEVALUE
  1146.                                                                                          )
  1147.                                                                             ,(MPARAM)0
  1148.                                                                            )
  1149.                                                               );
  1150.     m_dPixelToRange = (double)(nPixelRange - m_nThumbLength)/(double)(m_nRangeMax - m_nRangeMin);
  1151.     int                             nNewPos = (int)(nValue * m_dPixelToRange);
  1152.  
  1153.     ::WinSendMsg( GetHwnd()
  1154.                  ,SLM_SETSLIDERINFO
  1155.                  ,MPFROM2SHORT( SMA_SLIDERARMPOSITION
  1156.                                ,SMA_RANGEVALUE
  1157.                               )
  1158.                  ,(MPARAM)nNewPos
  1159.                 );
  1160.     if (m_hStaticValue)
  1161.     {
  1162.         wxSprintf(wxBuffer, wxT("%d"), nValue);
  1163.         ::WinSetWindowText((HWND)m_hStaticValue, wxBuffer);
  1164.     }
  1165. } // end of wxSlider::SetValue
  1166.  
  1167. bool wxSlider::Show(
  1168.   bool                              bShow
  1169. )
  1170. {
  1171.     wxWindowOS2::Show(bShow);
  1172.     if(m_hStaticValue)
  1173.         ::WinShowWindow((HWND)m_hStaticValue, bShow);
  1174.     if(m_hStaticMin)
  1175.         ::WinShowWindow((HWND)m_hStaticMin, bShow);
  1176.     if(m_hStaticMax)
  1177.         ::WinShowWindow((HWND)m_hStaticMax, bShow);
  1178.     return TRUE;
  1179. } // end of wxSlider::Show
  1180.  
  1181.