Уважаемые корифеи!!!
Может кто снисходительно просветит несведущего?
Есть окно со скроллерами( при создании, указаны в стиле окна).
Я делаю следующее: создаю контекст памяти, привязываю к нему битмап, по размеру больший,
чем окно. На него отрисовываю что-нить. На события ON_WM_VSCROLL(),ON_WM_HSCROLL() я выставляю позицию скроллера и делаю InvalidateRect(&aWndClientRect). На OnPaint() я выполняю this->GetDC()->BitBlt(0,0,aWndClientRect.right,aWndClientRect.bottom, &memDC,GetScrollPos(SB_HORZ),
GetScrollPos(SB_VERT),SRCCOPY ); Все это работает, но только ЖУТКО ТОРМОЗНО!!! И глядя на иные приклады,
я подобного тормоза не вижу. Еще я заметил, что у меня просто не переставая засылается PAINT. Ради теста
я вписал в OnPaint простейщую строку типа TextOut(x,y, число репейнтов), открыл окно и замер. Выводимый в
окне счетчик тут же устремился к пределам LongInt, хотя я окно не трогаю. Но репейнт прет не переставая.
Подскажите плиз, как все сделать грамотно??? Я пока также по букам полезу.
Заранее спасибо!
Здравствуйте avanti, Вы писали:
this->GetDC()->BitBlt(0,0,aWndClientRect.right,aWndClientRect.bottom, &memDC,GetScrollPos(SB_HORZ), [skip]
Почему GetDC() ?
Скорее всего, ты не чистишь Invalidate Region в OnPaint() , т.е. не вызывашь BeginPain()/EndPaint(). Чтобы заработало, надо скорее всего заменить GetDC() в OnPaint() на CPaintDC, т.е. вот так:
Хотелось бы полностью посмотреть на тела обработчиков скрола и
WM_PAINT.
Возможно, ты делаешь в функции OnPaint,что-то, что приводит
к посылке сообщения WM_PAINT. Т.е. функция OnPaint шлет сообщение
сама себе, и таким образом у тебя происходит зацикливание.