#include <stdio.h>
#include <wx/utils.h>
#include <wx/brush.h>
+#include <wx/scrolwin.h>
#endif
#include "wx/slider.h"
::WinDestroyWindow((HWND)m_hStaticValue);
} // end of wxSlider::~wxSlider
+void wxSlider::AdjustSubControls(
+ int nX
+, int nY
+, int nWidth
+, int nHeight
+, int nSizeFlags
+)
+{
+ SWP vSwp;
+ int nXOffset = nX;
+ int nYOffset = nY;
+ int nCx; // slider,min,max sizes
+ int nCy;
+ int nCyf;
+ char zBuf[300];
+
+ wxGetCharSize( GetHWND()
+ ,&nCx
+ ,&nCy
+ ,&this->GetFont()
+ );
+
+ if ((m_windowStyle & wxSL_VERTICAL) != wxSL_VERTICAL)
+ {
+ if (m_windowStyle & wxSL_LABELS )
+ {
+ int nMinLen = 0;
+ int nMaxLen = 0;
+
+ ::WinQueryWindowText((HWND)m_hStaticMin, 300, zBuf);
+ GetTextExtent(zBuf, &nMinLen, &nCyf, NULL, NULL, &this->GetFont());
+
+ ::WinQueryWindowText((HWND)m_hStaticMax, 300, zBuf);
+ GetTextExtent(zBuf, &nMaxLen, &nCyf, NULL, NULL, &this->GetFont());
+
+ if (m_hStaticValue)
+ {
+ int nNewWidth = wxMax(nMinLen, nMaxLen);
+ int nValueHeight = nCyf;
+
+ ::WinSetWindowPos( (HWND)m_hStaticValue
+ ,HWND_TOP
+ ,(LONG)nXOffset - (nNewWidth + nCx + nMinLen + nCx)
+ ,(LONG)nYOffset
+ ,(LONG)nNewWidth
+ ,(LONG)nValueHeight
+ ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW
+ );
+ }
+ ::WinSetWindowPos( (HWND)m_hStaticMin
+ ,HWND_TOP
+ ,(LONG)nXOffset - (nMinLen + nCx)
+ ,(LONG)nYOffset
+ ,(LONG)nMinLen
+ ,(LONG)nCy
+ ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW
+ );
+ nXOffset += nWidth + nCx;
+
+ ::WinSetWindowPos( (HWND)m_hStaticMax
+ ,HWND_TOP
+ ,(LONG)nXOffset
+ ,(LONG)nYOffset
+ ,(LONG)nMaxLen
+ ,(LONG)nCy
+ ,SWP_ZORDER | SWP_SIZE | SWP_MOVE | SWP_SHOW
+ );
+ }
+ }
+ //
+ // Now deal with a vertical slider -- OS/2 doesn't have vertical sliders
+ //
+} // end of wxSlider::AdjustSubControls
+
void wxSlider::ClearSel()
{
} // end of wxSlider::ClearSel
{
lMsStyle |= WS_VISIBLE | SS_TEXT | DT_VCENTER;
+ //
+ // If the parent is a scrolled window the controls must
+ // have this style or they will overlap the scrollbars
+ //
+ if (pParent)
+ if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) ||
+ pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)))
+ lMsStyle |= WS_CLIPSIBLINGS;
+
m_hStaticValue = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
,WC_STATIC // Window class
,(PSZ)NULL // Initial Text
lWstyle = SS_TEXT|DT_LEFT|WS_VISIBLE;
if (m_windowStyle & wxCLIP_SIBLINGS)
lWstyle |= WS_CLIPSIBLINGS;
+ //
+ // If the parent is a scrolled window the controls must
+ // have this style or they will overlap the scrollbars
+ //
+ if (pParent)
+ if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) ||
+ pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)))
+ lWstyle |= WS_CLIPSIBLINGS;
+
m_hStaticMin = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
,WC_STATIC // Window class
,(PSZ)wxBuffer // Initial Text
else
lMsStyle |= SLS_PRIMARYSCALE2;
+ //
+ // If the parent is a scrolled window the controls must
+ // have this style or they will overlap the scrollbars
+ //
+ if (pParent)
+ if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) ||
+ pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)))
+ lMsStyle |= WS_CLIPSIBLINGS;
+
m_nPageSize = ((nMaxValue - nMinValue)/10);
vSlData.usScale1Increments = m_nPageSize;
vSlData.usScale2Increments = m_nPageSize;
m_hWnd = (WXHWND)hScrollBar;
SubclassWin(GetHWND());
::WinSetWindowText((HWND)m_hWnd, "");
- SetFont(pParent->GetFont());
+ SetFont(*wxSMALL_FONT);
if (m_windowStyle & wxSL_LABELS)
{
//
lWstyle = SS_TEXT|DT_LEFT|WS_VISIBLE;
if (m_windowStyle & wxCLIP_SIBLINGS)
lMsStyle |= WS_CLIPSIBLINGS;
+ //
+ // If the parent is a scrolled window the controls must
+ // have this style or they will overlap the scrollbars
+ //
+ if (pParent)
+ if (pParent->IsKindOf(CLASSINFO(wxScrolledWindow)) ||
+ pParent->IsKindOf(CLASSINFO(wxGenericScrolledWindow)))
+ lWstyle |= WS_CLIPSIBLINGS;
+
m_hStaticMax = (WXHWND)::WinCreateWindow( (HWND)GetHwndOf(pParent) // Parent window handle
,WC_STATIC // Window class
,(PSZ)wxBuffer // Initial Text
,sizeof(LONG)
,(PVOID)&lColor
);
+ lColor = (LONG)m_backgroundColour.GetPixel();
+ ::WinSetPresParam( m_hStaticMin
+ ,PP_BACKGROUNDCOLOR
+ ,sizeof(LONG)
+ ,(PVOID)&lColor
+ );
+ ::WinSetPresParam( m_hStaticMax
+ ,PP_BACKGROUNDCOLOR
+ ,sizeof(LONG)
+ ,(PVOID)&lColor
+ );
+ ::WinSetPresParam( m_hStaticValue
+ ,PP_BACKGROUNDCOLOR
+ ,sizeof(LONG)
+ ,(PVOID)&lColor
+ );
+ ::WinSetPresParam( m_hWnd
+ ,PP_BACKGROUNDCOLOR
+ ,sizeof(LONG)
+ ,(PVOID)&lColor
+ );
SetValue(nValue);
return TRUE;
} // end of wxSlider::Create
if (pParent)
{
- //
- // Under OS/2, where a frame window is the parent, most child windows
- // that are not specific frame clients are actually children of the
- // frame's client, not the frame itself, and so position themselves
- // with regards to the client origin, not the frame.
- //
- if (pParent->IsKindOf(CLASSINFO(wxFrame)))
- {
- nYOffset = pParent->GetClientSize().y - (nYOffset + nOS2Height);
- if (nY != -1)
- nY1 = pParent->GetClientSize().y - (nY1 + nOS2Height);
- }
- else
- {
- nYOffset = pParent->GetSize().y - (nYOffset + nOS2Height);
- if (nY != -1)
- nY1 = pParent->GetSize().y - (nY1 + nOS2Height);
- }
+ int nOS2ParentHeight = GetOS2ParentHeight(pParent);
+
+ nYOffset = nOS2ParentHeight - (nYOffset + nOS2Height);
+ if (nY != -1)
+ nY1 = nOS2ParentHeight - (nY1 + nOS2Height);
}
else
{
if (nY != -1)
nY1 = vRect.yTop - (nY1 + nOS2Height);
}
+ m_nSizeFlags = nSizeFlags;
GetPosition( &nCurrentX
,&nCurrentY