0

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 に取得し、その上に半透明の背景、グラデーション ボックス、およびテキストを描画できます。

要約: ダブル バッファでアルファ ブレンドを使用したい

何かアドバイス?

4

2 に答える 2

0

これを行う正確な方法は、実際にはかなり複雑です。ここでの簡単な答えよりも複雑です。Project Resistanceのソースを見てください。ダブル バッファリングされたフォームがあり、透明度のアルファ チャネルを使用して背景とコントロールをペイントしています。

于 2009-11-28T16:46:00.737 に答える
0

タイトル バーとメニューを取得せずに、Windows Mobile で実行されているアプリケーションのスナップショットを取得する方法を次に示します。

これは、ダブル バッファリングを開始するために探していた画像です。

于 2009-12-03T11:33:49.620 に答える