Как сделать скролл бар?

djmouse

Приветствую. Есть окошко, в которое выводится куча текста через TextOut в цикле do while и весь он в коне не помещается. В итоге понадобился скроллбар. Что есть:
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPED|WS_VSCROLL|ES_AUTOVSCROLL,
      CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
case WM_VSCROLL:
        switch(LOWORD(wParam))
        {
        case SB_LINEDOWN:
            if(nVertPosition<=50)
                nVertPosition++;
            break;
        case SB_LINEUP:
            if(nVertPosition>0)
                nVertPosition--;
            break;
        case SB_THUMBTRACK:
            nVertPosition=HIWORD(wParam);
            break;
        }
   SetScrollPos(hWnd,SB_VERT,nVertPosition,TRUE);
   ScrollWindowEx(hWnd,0,-5,NULL,NULL,NULL,NULL,SW_INVALIDATE);
Скролл прокручивает текст, но текст, который должен быть отображен выезжает обрезанным и все время одна и та же строка. Что делать?)
3 ответа

djmouse

а выложи весь проект. просто как-то не совсем понятно...TextOut это ж графика. на чем рисуешь? просто как-то мне кажется, что тут-то как раз и проблемка. ибо вроде как если не помещается...то ты рисуешь за пределами окна, а там место то есть в этот момент?


djmouse

Действительно, текст, который не уместился на экране не рисуется при движении ползунка. Не знал, исправлюсь. Зато если влезал, то может поездить вверх-вниз, пока не уедет за пределы экрана. После чего также не рисуется, если скроллить обратно. Вопрос: как починить? Нужно вывести довольно объемный текст, который на экран никак не влезает.


djmouse

я бы сделал большой битмап, рисовал бы на нем. а по сообщениям от скролбара просто копировал бы нужную его часть в окно (BitBlt), ну и пл WM_PAINT тоже...возможно есть и решение попроще