2010-06-08 8 views
0

Я хочу спросить о том, как оптимизировать перерисовку в Compact Framework? GetHashCode() не помог, потому что он всегда возвращает другой хэш-код.NETCF - Оптимизированная перекраска (onPaint)

Во всяком случае, у меня есть программа, которую вы можете перетащить и изменить размер объекта во время выполнения. Этот объект является прозрачным объектом и имеет PNG-изображение, которое также динамически изменяет размер относительно размера клиентского объекта.

Хотя я заметил (например, у меня есть 4 прозрачных объекта, и я перетаскиваю или изменяю их размер), все 4 из них запускают OnPaintBackground, даже если они не перемещаются. Еще один, когда я просто нажимаю на один объект. Он порождает триггер onPaintBacground(). Во всяком случае, у меня нет проблем при запуске этих событий.

Что мне нравится делать, это оптимизация, и это означает, что мне нужно только перекрасить объект, когда это необходимо.

Можете ли вы, ребята, дать предложения?

вот мой псевдо C# код

Bitmap _backBuff; 
onResize() { 
    if(_backBuff != null) _backBuff.Dispose(); 
    _backBuff = new Bitmap(ClientSize.Width, ClientSize.Height); 
    Invalidate(); 
} 

onPaintBackground(e) /*have to use onPaintBackground because MSDN said it's faster*/ { 
    using(Graphics g = Graphics.FromImage(_backBuff)) { 
     g.Clear(Color.Black); 

     // draw background 
     ....some interface calling here 
     ....and paint the background 

     // draw alpha PNG 
     .. get hDc 
     .. paint PNG 
     .. release hDc 
    } 

    e.Graphics.DrawImage(_backBuff,0,0); 
} 

Спасибо заранее.

+0

OnPaintBackground быстрее? Можете ли вы предоставить ссылку для этого заявления? Обычно, когда я рисую прозрачные вещи в WinCE, я переопределяю paintBackground и оставляю его _empty_, а затем нарисуем мои вещи в Paint. – Quibblesome

ответ

1

Есть идея

Я должен проверить новое место или новые различия в размерах между старыми. Если один из них является новым, тогда сделайте перерисовку .. else .. нарисуйте _backBuff (который действует как образ кэша).

Я реализовал его, и до сих пор он хорошо выглядит, чтобы перекрасить или покрасить кеш.

+0

Вы, немного грязной проверки, должны выполнять эту работу, как вы только что закончили. Другая возможность состоит в том, чтобы выполнить покраску всех предметов в пределах одного объекта, в отличие от того, чтобы иметь несколько меньших объектов, все отвлекающие. Это поможет вам лучше контролировать картину за счет того, что потребуется некоторое время для настройки в первую очередь. – Quibblesome

Смежные вопросы