GDI быстрая прокрутка - PullRequest
4 голосов
/ 24 мая 2010

Я использую GDI для создания собственного текстового виджета. Я рисую прямо на экран, без буферизации.

Теперь я хотел бы реализовать некоторую быструю прокрутку, которая просто смещает пиксели на соответствующую часть кадрового буфера (и перерисовывает только новые видимые строки).

Я заметил, что, например, элементы управления rich text делают это следующим образом. Если я использую некоторые функции рисования GDI для непосредственного рисования в буфер кадров через элемент управления расширенного текста, а затем прокручиваю форматированный текст, он также прокручивает мой рисунок вместе с текстом. поэтому я предполагаю, что форматированный текст просто смещает пиксели в часть кадрового буфера.

Я бы хотел сделать то же самое, но не знаю, как это сделать.

Может кто-нибудь помочь? (независимо от языка программирования))

спасибо!

Ответы [ 2 ]

8 голосов
/ 24 мая 2010

API-функция ScrollWindowEx () оптимизирована для этого.

2 голосов
/ 24 мая 2010

См. BitBlt Функция:

Функция BitBlt выполняет битовая передача цветовых данных соответствующий прямоугольнику пикселей с указанного исходного устройства контекст в устройство назначения контекст.

и пример в конце документации: Захват изображения :

Вы можете использовать растровое изображение для захвата изображение, и вы можете сохранить захваченное изображение в памяти, показать его на другое место в вашем окно приложения. [...] В некоторых случаях вы можете захотеть приложение для захвата изображений и хранить их только временно. [...] Для временно сохранить изображение, ваш приложение должно позвонить CreateCompatibleDC для создания DC, который совместим с текущим окном ОКРУГ КОЛУМБИЯ. После создания совместимого DC, вы создаете растровое изображение с соответствующие размеры, вызвав Функция CreateCompatibleBitmap и затем выберите его в этом устройстве контекст, вызвав SelectObject функция.

После того, как контекст совместимого устройства создан и соответствующий растровое изображение имеет был выбран в него, вы можете захватить изображение. Функция BitBlt захватывает изображения. Эта функция выполняет передачу блока битов, то есть копирует данные из исходного растрового изображения в целевое растровое изображение. [...] Чтобы снова отобразить изображение, вызовите BitBlt второй раз, указав совместимый DC в качестве источника DC и окно DC в качестве целевой DC.

...