Nord777 писал(а):А чтобы пример работал с несколькими картинками, надо всего лишь обьявить массив обьектов класса GCHandle
Есть и более универсальные методы, в которых в результате работы нет привязки к GCHandle вообще
Nord777 писал(а):Вариантов - море, главное понимать свои действия.
Понимание приходит постепенно. Но ведь таки приходит!
Nord777 писал(а):Я думаю у тебя все получится, удачи.
Спасибо тебе, прям что б я без тебя делал
_____________________________________________
Хотелось бы задать теоретический вопрос: какой из способов прорисовки быстрее?
Объект работы -
Листвью1 способ: создается буфферная картинка, на которую рисуются отображаемые элементы (причем целиком, например с 4 по 11, независимо от их отображаемой части), затем она отрисовывается в Paint`е учитывая сдвиг. При промотке на невидимый элемент фоновая картинка "проматывается" на элемент выше (ниже) и снизу (сверху) прорисовывается еще один элемент, после чего все повторяется.
При изменении одного элемента (если он отображается) он перерисовывается на буфферной картинке (потом вызывается
Invalidate(Rect))
2 способ: Создается буфферный Graphics (альтернативный
BufferedGrahics`у, самодельный), в который прорисовываются элементы с учетом сдвига (ссответственно буфферный Graphics имеет размеры контрола). При промотке вызывается
Translate(X,Y), и дорисовывается недостоющая часть. В Paint`е вызывается прцедура
Graphics.Render(e.Graphics).
"За" и "Против":
1 способ: Смущает рисование картинки с заданных координат, хотя там вроде BitBlt используется, но сомнения все же остаются. Да и вооюще способ кажется "наколеночным"
2 способ: Думаю, что постоянные трансляции будут очень тормозить всю конструкцию, да и при необходимости перерисовки 2-3х ранее не видимых пикселей придется перерисовывать весь
Item, что, ИМХО, вообще сумашествие. Да там и математики много получается...
Используется первый способ, но начав скланяться ко второму я нашел в нем несколько, по моему, узких мест. Есть ли смысл переписывать отрисовку, или лучше все равно не получиться?