//
// wxWnd
//
- m_hMenu = 0;
- m_hWnd = 0;
+ m_hMenu = 0L;
+ m_hWnd = 0L;
+ m_hWndScrollBarHorz = 0L;
+ m_hWndScrollBarVert = 0L;
//
// Pass WM_GETDLGCODE to DefWindowProc()
)
{
HWND hParent = NULLHANDLE;
+ wxPoint vPos = rPos; // The OS/2 position
wxCHECK_MSG(pParent, FALSE, wxT("can't create wxWindow without parent"));
{
pParent->AddChild(this);
hParent = GetWinHwnd(pParent);
+ //
+ // OS2 uses normal coordinates, no bassackwards Windows ones
+ //
+ vPos.y = pParent->GetSize().y - (vPos.y + rSize.y);
}
else
- hParent = HWND_DESKTOP;
+ {
+ RECTL vRect;
+
+ ::WinQueryWindowRect(HWND_DESKTOP, &vRect);
+ hParent = HWND_DESKTOP;
+ vPos.y = vRect.yTop - (vPos.y + rSize.y);
+ }
ULONG ulCreateFlags = 0L;
,(PSZ)wxCanvasClassName
,rName.c_str()
,ulCreateFlags
- ,rPos.x
- ,rPos.y
+ ,vPos.x
+ ,vPos.y
,WidthDefault(rSize.x)
,HeightDefault(rSize.y)
,NULLHANDLE
, bool bRefresh
)
{
- ::WinSendMsg(GetHwnd(), SBM_SETSCROLLBAR, (MPARAM)nPos, MPFROM2SHORT(0, nRange));
- if (nOrient == wxHORIZONTAL)
+ int nOldRange = nRange - nThumbVisible;
+ int nRange1 = nOldRange;
+ int nPageSize = nThumbVisible;
+ SBCDATA vInfo;
+ HWND hWnd = GetHwnd();
+ ULONG ulStyle = WS_VISIBLE;
+ RECTL vRect;
+
+ ::WinQueryWindowRect(hWnd, &vRect);
+ if (nPageSize > 1 && nRange > 0)
+ {
+ nRange1 += (nPageSize - 1);
+ }
+
+ vInfo.cb = sizeof(SBCDATA);
+ vInfo.posFirst = 0;
+ vInfo.posLast = (SHORT)nRange1;
+ vInfo.posThumb = nPos;
+
+ if (nOrient == wxHORIZONTAL )
{
- m_nXThumbSize = nThumbVisible;
+ ulStyle |= SBS_HORZ;
+ if (m_hWndScrollBarHorz == 0L)
+ {
+ m_hWndScrollBarHorz = ::WinCreateWindow( hWnd
+ ,WC_SCROLLBAR
+ ,(PSZ)NULL
+ ,ulStyle
+ ,vRect.xLeft
+ ,vRect.yBottom
+ ,vRect.xRight - vRect.xLeft
+ ,20
+ ,hWnd
+ ,HWND_TOP
+ ,-1
+ ,&vInfo
+ ,NULL
+ );
+ }
+ else
+ {
+ RECTL vRect2;
+
+ //
+ // Only want to resize the scrollbar if it changes, otherwise
+ // we'd probably end up in a recursive loop until we crash the call stack
+ // because this method is called in a ScrolledWindow OnSize event and SWP_MOVE | SWP_SIZE
+ // generates those events.
+ //
+ ::WinQueryWindowRect(m_hWndScrollBarHorz, &vRect2);
+ if (!(vRect2.xLeft == vRect.xLeft &&
+ vRect2.xRight == vRect.xRight &&
+ vRect2.yBottom == vRect.yBottom &&
+ vRect2.yTop == vRect.yTop
+ ) )
+ {
+ ::WinSetWindowPos( m_hWndScrollBarHorz
+ ,HWND_TOP
+ ,vRect.xLeft
+ ,vRect.yBottom
+ ,vRect.xRight - vRect.xLeft
+ ,20
+ ,SWP_ACTIVATE | SWP_MOVE | SWP_SIZE | SWP_SHOW
+ );
+ }
+ ::WinSendMsg(m_hWndScrollBarHorz, SBM_SETSCROLLBAR, (MPARAM)nPos, MPFROM2SHORT(0, (SHORT)nRange1));
+ ::WinSendMsg(m_hWndScrollBarHorz, SBM_SETTHUMBSIZE, MPFROM2SHORT((SHORT)nThumbVisible, (SHORT)nRange1), (MPARAM)0);
+ }
}
else
{
+ ulStyle |= SBS_VERT;
+ if (m_hWndScrollBarVert == 0L)
+ {
+ m_hWndScrollBarVert = ::WinCreateWindow( hWnd
+ ,WC_SCROLLBAR
+ ,(PSZ)NULL
+ ,ulStyle
+ ,vRect.xRight - 20
+ ,vRect.yBottom
+ ,20
+ ,vRect.yTop - vRect.yBottom
+ ,hWnd
+ ,HWND_TOP
+ ,-1
+ ,&vInfo
+ ,NULL
+ );
+ }
+ else
+ {
+ RECTL vRect2;
+
+ //
+ // Only want to resize the scrollbar if it changes, otherwise
+ // we'd probably end up in a recursive loop until we crash the call stack
+ // because this method is called in a ScrolledWindow OnSize event and SWP_MOVE | SWP_SIZE
+ // generates those events.
+ //
+ ::WinQueryWindowRect(m_hWndScrollBarVert, &vRect2);
+ if (!(vRect2.xLeft == vRect.xLeft &&
+ vRect2.xRight == vRect.xRight &&
+ vRect2.yBottom == vRect.yBottom &&
+ vRect2.yTop == vRect.yTop
+ ) )
+ {
+ ::WinSetWindowPos( m_hWndScrollBarVert
+ ,HWND_TOP
+ ,vRect.xRight - 20
+ ,vRect.yBottom
+ ,20
+ ,vRect.yTop - vRect.yBottom
+ ,SWP_ACTIVATE | SWP_MOVE | SWP_SIZE | SWP_SHOW
+ );
+ }
+ ::WinSendMsg(m_hWndScrollBarVert, SBM_SETSCROLLBAR, (MPARAM)nPos, MPFROM2SHORT(0, (SHORT)nRange1));
+ ::WinSendMsg(m_hWndScrollBarVert, SBM_SETTHUMBSIZE, MPFROM2SHORT((SHORT)nThumbVisible, (SHORT)nRange1), (MPARAM)0);
+ }
m_nYThumbSize = nThumbVisible;
}
} // end of wxWindow::SetScrollbar
return FALSE;
}
}
- wxWindow* pItem = FindItem(id);
+ wxWindow* pItem = FindItem(lId);
if (pItem && pItem->IsKindOf(CLASSINFO(wxControl)))
{