|
|
Быстрая отрисовка индикатора
Для того, чтобы "кирпичик" получился объемным, он рисуется тремя прямоугольниками:
- Темным тоном - в полный размер (нам нужны нижняя и правая линии).
- Светлым тоном - на один пиксель меньше (нам нужны верхняя и левая линии).
- Основным тоном - с отступом в один пиксель вправо-вниз и на два пикселя меньше (нам нужна середина).
Попытка рисовать кирпичики непосредственно в окне индикатора привела к мельканию индикатора на машинах со слабой видеокартой (eee-pc).
Поэтому пришлось воспользоваться заранее подготовленной кистью в виде одного кирпичика.
Сначала рисуем один кирпичик. Делаем мы это всегда в горизонтальном режиме:
Bitmap bmpRect = new Bitmap (AddPos, nSize );
Graphics grRect = Graphics. FromImage(bmpRect );
grRect. FillRectangle(Brushes. Black, 0, 0, AddPos, nSize );
grRect. FillRectangle(DarkBrush, 0, 0, AddPos - 1, nSize );
grRect. FillRectangle(LightBrush, 0, 0, AddPos - 2, nSize - 1 );
grRect. FillRectangle(MainBrush, 1, 1, AddPos - 3, nSize - 2 );
|
Здесь:
- AddPos и nSize - соответственно, длина и толщина кирпичика.
- MainBrush - основной цвет.
- DarkBrush и LightBrush - соответственно, темный и светлый тон.
Затем, в вертикальном режиме переворачиваем рисунок (в горизонтальном ничего не делаем):
// В вертикальном режиме - поворачиваем прямоугольник
bmpRect.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
Осталось создать кисть:
// Готовим кисть
TextureBrush Bru = new TextureBrush (bmpRect );
|
Полученной кистью рисуем в функции отрисовки нужную часть индикатора. Оставшуюся часть индикатора закрашиваем черным.
В результате всех этих манипуляций получаем два преимущества, которые избавляют нас от мелькания:
- Рисование производится в два приема.
- Отсутствует предваритальное стирание изображения.
Все красиво, ничего не мелькает, чего мы, собственно, и добивались.
Более подробную информацию обо всех использованных классах и их свойствах можно найти в MSDN.
Если есть что добавить или есть вопросы - почта и мой блог (записи с тегом "статьи") к Вашим услугам.
Alex Konuhoff.
|
|
|