Я разрабатываю приложение для Windows Mobile 5.0 и выше с .Net Compact Framework 2.0 SP2 с C # .
Я переопределяю метод OnPaint в пользовательском окне сообщений, которое рисует растровое изображение, заполняющее всю форму альфа-прозрачностью, и градиентное поле с кнопкой и сообщением на полупрозрачном фоне.
Я тестирую его, но он такой медленный, поэтому я собираюсь использовать двойной буфер. Я могу использовать двойной буфер для рисования градиента и теста, но если я использую двойной буфер с фоновым растровым изображением с альфа-прозрачностью, он не закрашивает альфа-прозрачность. Так что я делаю только двойной буфер с градиентом, сообщением и кнопкой. Задний прозрачный растровый рисунок нарисован непосредственно на e.Graphics.
Мне интересно, смогу ли я сохранить e.Graphics на растровом изображении, чтобы выполнить всю работу и завершить рисование метода OnPaint на e.Graphics на этом растровом изображении, которое я сохранил раньше.
Это мой код:
protected override void OnPaint(PaintEventArgs e)
{
Graphics gxOff;
gxOff = Graphics.FromImage(bmpOffscreen);
if (!isOuterBackgroundPainted)
{
isOuterBackgroundPainted = true;
DrawingHelper.DrawAlpha(e.Graphics, outerBackground, 180, 0, 0);
// Here I don't use double buffer because Alpha Blend doesn't work with double buffer.
//DrawingHelper.DrawAlpha(gxOff, outerBackground, 180, 0, 0);
}
// Draw the gradient box
GradientFill.Fill(gxOff, rectangle, startColor, endColor, FillDirection.TopToBottom);
gxOff.DrawString(message, font, brush, textLayoutRectangle);
e.Graphics.DrawImage(bmpOffscreen, 10, 10);
base.OnPaint(e);
}
bmpOffscreen: битовая карта двойного буфера.
Может быть, я смогу получить мгновенный магазин формы в bmpOffscreen и затем нарисовать полупрозрачный фон поверх него, градиентной рамки и текста.
Обобщение: Я хочу использовать альфа-смесь с двойным буфером .
Любой совет?