void CPWL_IconList::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam) { CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); if (wParam == SBT_VSCROLL) { switch (msg) { case PNM_SETSCROLLINFO: if (PWL_SCROLL_INFO* pInfo = (PWL_SCROLL_INFO*)lParam) { if (CPWL_ScrollBar* pScrollBar = GetVScrollBar()) { if (pInfo->fContentMax - pInfo->fContentMin > pInfo->fPlateWidth) { if (!pScrollBar->IsVisible()) { pScrollBar->SetVisible(TRUE); RePosChildWnd(); } else { } } else { if (pScrollBar->IsVisible()) { pScrollBar->SetVisible(FALSE); RePosChildWnd(); } if (m_pListContent) m_pListContent->SetScrollPos(CPDF_Point(0.0f,0.0f)); } pScrollBar->OnNotify(pWnd,PNM_SETSCROLLINFO,wParam,lParam); } } return; case PNM_SCROLLWINDOW: if (m_pListContent) { m_pListContent->SetScrollPos(CPDF_Point(0.0f, *(FX_FLOAT*)lParam)); m_pListContent->ResetFace(); m_pListContent->InvalidateRect(NULL); } return; case PNM_SETSCROLLPOS: if (CPWL_ScrollBar* pScrollBar = GetVScrollBar()) pScrollBar->OnNotify(pWnd,PNM_SETSCROLLPOS,wParam,lParam); return; } } }
void CPWL_EditCtrl::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam) { CPWL_Wnd::OnNotify(pWnd,msg,wParam,lParam); switch (msg) { case PNM_SETSCROLLINFO: switch (wParam) { case SBT_VSCROLL: if (CPWL_Wnd * pChild = GetVScrollBar()) { pChild->OnNotify(pWnd,PNM_SETSCROLLINFO,wParam,lParam); } break; } break; case PNM_SETSCROLLPOS: switch (wParam) { case SBT_VSCROLL: if (CPWL_Wnd * pChild = GetVScrollBar()) { pChild->OnNotify(pWnd,PNM_SETSCROLLPOS,wParam,lParam); } break; } break; case PNM_SCROLLWINDOW: { FX_FLOAT fPos = *(FX_FLOAT*)lParam; switch (wParam) { case SBT_VSCROLL: m_pEdit->SetScrollPos(CPDF_Point(m_pEdit->GetScrollPos().x,fPos)); break; } } break; case PNM_SETCARETINFO: { if (PWL_CARET_INFO * pCaretInfo = (PWL_CARET_INFO *)wParam) { SetCaret(pCaretInfo->bVisible, pCaretInfo->ptHead, pCaretInfo->ptFoot); } } break; } }
bool CPWL_Edit::IsVScrollBarVisible() const { if (CPWL_ScrollBar* pScroll = GetVScrollBar()) { return pScroll->IsVisible(); } return false; }
void CPWL_IconList::OnCreated() { if (CPWL_ScrollBar* pScrollBar = GetVScrollBar()) { pScrollBar->RemoveFlag(PWS_AUTOTRANSPARENT); pScrollBar->SetTransparency(255); pScrollBar->SetNotifyForever(TRUE); } }
FX_BOOL CPWL_Edit::IsVScrollBarVisible() const { if (CPWL_ScrollBar* pScroll = GetVScrollBar()) { return pScroll->IsVisible(); } return FALSE; }
CFX_FloatRect CPWL_Wnd::GetClientRect() const { CFX_FloatRect rcWindow = GetWindowRect(); CFX_FloatRect rcClient = CPWL_Utils::DeflateRect( rcWindow, (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth())); if (CPWL_ScrollBar* pVSB = GetVScrollBar()) rcClient.right -= pVSB->GetScrollBarWidth(); rcClient.Normalize(); return rcWindow.Contains(rcClient) ? rcClient : CFX_FloatRect(); }
CPDF_Rect CPWL_Edit::GetClientRect() const { CPDF_Rect rcClient = CPWL_Utils::DeflateRect( GetWindowRect(), (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth())); if (CPWL_ScrollBar* pVSB = GetVScrollBar()) { if (pVSB->IsVisible()) { rcClient.right -= PWL_SCROLLBAR_WIDTH; } } return rcClient; }
void CPWL_Wnd::RePosChildWnd() { CFX_FloatRect rcContent = CPWL_Utils::DeflateRect( GetWindowRect(), (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth())); CPWL_ScrollBar* pVSB = GetVScrollBar(); CFX_FloatRect rcVScroll = CFX_FloatRect(rcContent.right - PWL_SCROLLBAR_WIDTH, rcContent.bottom, rcContent.right - 1.0f, rcContent.top); if (pVSB) pVSB->Move(rcVScroll, TRUE, FALSE); }
void CPWL_ListBox::OnNotify(CPWL_Wnd* pWnd, uint32_t msg, intptr_t wParam, intptr_t lParam) { CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); FX_FLOAT fPos; switch (msg) { case PNM_SETSCROLLINFO: switch (wParam) { case SBT_VSCROLL: if (CPWL_Wnd* pChild = GetVScrollBar()) { pChild->OnNotify(pWnd, PNM_SETSCROLLINFO, wParam, lParam); } break; } break; case PNM_SETSCROLLPOS: switch (wParam) { case SBT_VSCROLL: if (CPWL_Wnd* pChild = GetVScrollBar()) { pChild->OnNotify(pWnd, PNM_SETSCROLLPOS, wParam, lParam); } break; } break; case PNM_SCROLLWINDOW: fPos = *(FX_FLOAT*)lParam; switch (wParam) { case SBT_VSCROLL: if (m_pList) m_pList->SetScrollPos(CFX_FloatPoint(0, fPos)); break; } break; } }
// respond to mousewheel events by paging or scrolling accordingly BOOL CCustomList::OnMouseWheel(UINT32 nFlags, short zDelta, CPoint pt) { SCROLLINFO si; si.cbSize = sizeof(SCROLLINFO); si.fMask = SIF_TRACKPOS|SIF_PAGE|SIF_RANGE; GetVScrollBar()->GetScrollInfo(&si); INT32 nStep = GetKeyState(CAMKEY(CONTROL))<0 ? si.nPage : ROWHEIGHT ; INT32 newPos = GetVScrollBar()->GetScrollPos() - nStep*zDelta/WHEEL_DELTA; // force to zero if the first line would appear partially off screen if(newPos < ROWHEIGHT) newPos = 0; // keep the upper limit within bounds if(newPos > si.nMax) newPos = si.nMax; if (m_ScrollableArea) { m_ScrollableArea->HandleScrollMessage(SB_THUMBPOSITION, newPos); } return CWnd::OnMouseWheel(nFlags, zDelta, pt); }
void CPWL_Edit::RePosChildWnd() { if (CPWL_ScrollBar* pVSB = GetVScrollBar()) { CPDF_Rect rcWindow = m_rcOldWindow; CPDF_Rect rcVScroll = CPDF_Rect(rcWindow.right, rcWindow.bottom, rcWindow.right + PWL_SCROLLBAR_WIDTH, rcWindow.top); pVSB->Move(rcVScroll, TRUE, FALSE); } if (m_pEditCaret && !HasFlag(PES_TEXTOVERFLOW)) m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect( GetClientRect(), 1.0f)); //+1 for caret beside border CPWL_EditCtrl::RePosChildWnd(); }
void CPWL_Edit::OnCreated() { CPWL_EditCtrl::OnCreated(); if (CPWL_ScrollBar* pScroll = GetVScrollBar()) { pScroll->RemoveFlag(PWS_AUTOTRANSPARENT); pScroll->SetTransparency(255); } SetParamByFlag(); m_rcOldWindow = GetWindowRect(); m_pEdit->SetOprNotify(this); m_pEdit->EnableOprNotify(TRUE); }
void CPWL_Edit::ShowVScrollBar(FX_BOOL bShow) { if (CPWL_ScrollBar* pScroll = GetVScrollBar()) { if (bShow) { if (!pScroll->IsVisible()) { pScroll->SetVisible(TRUE); CPDF_Rect rcWindow = GetWindowRect(); m_rcOldWindow = rcWindow; rcWindow.right += PWL_SCROLLBAR_WIDTH; Move(rcWindow, TRUE, TRUE); } } else { if (pScroll->IsVisible()) { pScroll->SetVisible(FALSE); Move(m_rcOldWindow, TRUE, TRUE); } } } }
void CPWL_Edit::ShowVScrollBar(bool bShow) { if (CPWL_ScrollBar* pScroll = GetVScrollBar()) { if (bShow) { if (!pScroll->IsVisible()) { pScroll->SetVisible(true); CFX_FloatRect rcWindow = GetWindowRect(); m_rcOldWindow = rcWindow; rcWindow.right += PWL_SCROLLBAR_WIDTH; Move(rcWindow, true, true); } } else { if (pScroll->IsVisible()) { pScroll->SetVisible(false); Move(m_rcOldWindow, true, true); } } } }
FX_BOOL CPWL_IconList::OnMouseWheel(short zDelta, const CPDF_Point& point, FX_DWORD nFlag) { CPDF_Point ptScroll = m_pListContent->GetScrollPos(); CPDF_Rect rcScroll = m_pListContent->GetScrollArea(); CPDF_Rect rcContents = m_pListContent->GetClientRect(); if (rcScroll.top - rcScroll.bottom > rcContents.Height()) { CPDF_Point ptNew = ptScroll; if (zDelta > 0) ptNew.y += 30; else ptNew.y -= 30; if (ptNew.y > rcScroll.top) ptNew.y = rcScroll.top; if (ptNew.y < rcScroll.bottom + rcContents.Height()) ptNew.y = rcScroll.bottom + rcContents.Height(); if (ptNew.y < rcScroll.bottom) ptNew.y = rcScroll.bottom; if (ptNew.y != ptScroll.y) { m_pListContent->SetScrollPos(ptNew); m_pListContent->ResetFace(); m_pListContent->InvalidateRect(NULL); if (CPWL_ScrollBar* pScrollBar = GetVScrollBar()) pScrollBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&ptNew.y); return TRUE; } } return FALSE; }
void CPWL_ListBox::SetScrollPosition(float pos) { if (CPWL_Wnd* pChild = GetVScrollBar()) pChild->SetScrollPosition(pos); }
void CPWL_ListBox::SetScrollInfo(const PWL_SCROLL_INFO& info) { if (CPWL_Wnd* pChild = GetVScrollBar()) pChild->SetScrollInfo(info); }