C#を使用した.Net Compact Framework 2.0 SP2を使用して、 Windows Mobile 5.0以降のアプリケーションを開発しています。
フォーム全体をアルファ透明度で塗りつぶすビットマップを描画するカスタム メッセージ ボックスの 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 に取得し、その上に半透明の背景、グラデーション ボックス、およびテキストを描画できます。
要約: ダブル バッファでアルファ ブレンドを使用したい。
何かアドバイス?