Esempio n. 1
0
// TODO: Avoid flickering!
void MScrollView::UpdateScrollInfo()
{
    MRect rcClient;
    MScrollView::GetClientRect(&rcClient);

    SCROLLINFO si;

    si.cbSize = sizeof(si);
    si.fMask = SIF_ALL | SIF_DISABLENOSCROLL;
    si.nMin = 0;
    si.nMax = Extent().cx;
    si.nPage = rcClient.Width();
    if (static_cast<UINT>(si.nMax) < si.nPage)
        ScrollPos().x = 0;
    si.nPos = ScrollPos().x;
    SetHScrollInfo(&si, TRUE);

    si.cbSize = sizeof(si);
    si.fMask = SIF_ALL | SIF_DISABLENOSCROLL;
    si.nMin = 0;
    si.nMax = Extent().cy;
    si.nPage = rcClient.Height();
    if (static_cast<UINT>(si.nMax) < si.nPage)
        ScrollPos().y = 0;
    si.nPos = ScrollPos().y;
    SetVScrollInfo(&si, TRUE);

    ::InvalidateRect(m_hwndParent, NULL, TRUE);
}
Esempio n. 2
0
void MScrollView::UpdateCtrlsPos()
{
    const int siz = static_cast<int>(size());
    HDWP hDWP = ::BeginDeferWindowPos(siz);
    if (hDWP)
    {
        for (int i = 0; i < siz; ++i)
        {
            MRect& rcCtrl = m_vecInfo[i].m_rcCtrl;
            ::DeferWindowPos(hDWP, m_vecInfo[i].m_hwndCtrl,
                NULL,
                rcCtrl.left - ScrollPos().x, rcCtrl.top - ScrollPos().y,
                rcCtrl.Width(), rcCtrl.Height(),
                SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOCOPYBITS);
        }
        ::EndDeferWindowPos(hDWP);
    }
}
Esempio n. 3
0
void MScrollView::VScroll(int nSB_, int nPos)
{
    SCROLLINFO si;
    si.cbSize = sizeof(si);
    si.fMask = SIF_ALL;
    GetVScrollInfo(&si);

    switch (nSB_)
    {
    case SB_TOP:
        SetVScrollPos(0);
        break;

    case SB_BOTTOM:
        SetVScrollPos(si.nMax - si.nPage);
        break;

    case SB_LINELEFT:
        SetVScrollPos(si.nPos - 16);
        break;

    case SB_LINERIGHT:
        SetVScrollPos(si.nPos + 16);
        break;

    case SB_PAGELEFT:
        SetVScrollPos(si.nPos - si.nPage);
        break;

    case SB_PAGERIGHT:
        SetVScrollPos(si.nPos + si.nPage);
        break;

    case SB_THUMBPOSITION:
    case SB_THUMBTRACK:
        SetVScrollPos(nPos);
        break;
    }

    ScrollPos().y = GetVScrollPos();
    UpdateAll();
}
dim::point2di GUIListGadget::getItemsStartPos() const
{
    dim::point2di ScrollPos(getScrollPosition());
    return dim::point2di(Rect_.Left + 2 + ScrollPos.X, Rect_.Top + 2 + COLUMN_HEIGHT + ScrollPos.Y);
}