Re: Проблеммы со скролом
От: GDI Россия  
Дата: 12.03.04 16:44
Оценка:
Здравствуйте, sjman, Вы писали:
[]
S>И ещё вопросик: Как изменить цвет ScrollBar'а если не устраивает стандартный серый?

Я бы так сделал...

// Перерисовка
void CChildView::OnPaint() 
{
    CPaintDC dc(this); // device context for painting
    CRect rcClient;
    GetClientRect(&rcClient);

    CRect rect(50,50,400,400);
    dc.SetViewportOrg(0,-m_nVOffset);

    dc.FillSolidRect(&rect, 0x0000FF);
    
    dc.SetViewportOrg(0,0);
    dc.FillSolidRect(0,0,rcClient.right,20, 0xFAC0FF);
    dc.TextOut(20,1,"Ехал Грека через реку, цап за руку Греку рак! :-))");
    
}

int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CWnd::OnCreate(lpCreateStruct) == -1)
        return -1;

    // инициализация скролбара
    SCROLLINFO scrlInfo;
    scrlInfo.cbSize=sizeof(SCROLLINFO);
    scrlInfo.fMask=SIF_ALL;
    scrlInfo.nMin=0;
    scrlInfo.nMax=1000;
    scrlInfo.nPage=400;
    scrlInfo.nPos=0;
    scrlInfo.nTrackPos = 0;
    SetScrollInfo(SB_VERT, &scrlInfo);
    return 0;
}


// m_nVOffset - переменная-член класса CChildView
void CChildView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    CRect rcClient;
    GetClientRect(&rcClient);
    rcClient.top+=20;

    // calc new y position
    int yOrig = GetScrollPos(SB_VERT);
    int nDelta=0;

    // ну тут получаем дельту
    switch (nSBCode)
    {
    case SB_TOP:
        nDelta = 0;
        break;
    case SB_BOTTOM:
        nDelta = INT_MAX;
        break;
    case SB_LINEUP:
        nDelta = -10;
        break;
    case SB_LINEDOWN:
        nDelta = 10;
        break;
    case SB_PAGEUP:
        nDelta = -100;
        break;
    case SB_PAGEDOWN:
        nDelta = 100;
        break;
    case SB_THUMBTRACK:
        nDelta = nPos-yOrig;
        break;
    }

    m_nVOffset+=nDelta;    // ставим оффсет
    SetScrollPos(SB_VERT, m_nVOffset);        // ЫуеЫскщддЗщы
    ScrollWindow(0, -nDelta, 0, &rcClient); // скрол

    CWnd::OnVScroll(nSBCode, nPos, pScrollBar);
}


А цвет я не знаю как поменять! Это вроде нельзя сделать. Можно соорудить свой скролбар... или через CScrollBar::OnPaint рисуй сам.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.