2009-11-28 21 views
0

Je développe un Windows Mobile 5.0 et l'application avec .Net Compact Framework 2.0 SP2 avec C#.C#, Redéfinition OnPaint: transparence alpha avec double tampon

Je surcharge la méthode OnPaint sur un messagebox personnalisé qui dessine un bitmap qui remplit le formulaire entier avec la transparence alpha, et une boîte de dégradé avec un bouton et un message sur l'arrière-plan semi-transparent.

Je le teste mais il est si lent, donc je vais utiliser un double tampon. Je peux utiliser un double tampon pour dessiner la boîte de dégradé et le test, mais si j'utilise un double tampon avec le bitmap d'arrière-plan avec une transparence alpha, il ne peint pas la transparence alpha. Donc, je ne fais que double tampon avec la boîte de gradient et le message et le bouton. Le bitmap transparent de bacground est peint directement sur e.Graphics.

Je me demande si je peux sauvegarder e.Graphics sur un bitmap pour faire tout le travail et terminer la méthode OnPaint dessinant à e.Graphics ce bitmap que je l'ai enregistré auparavant.

Ceci est mon code:

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: le bitmap de tampon double. Peut-être que je peux obtenir un snapshop de forme dans bmpOffscreen et puis dessiner l'arrière-plan semi-transparent sur elle, la boîte de dégradé et le texte.

Résumé:Je souhaite utiliser un mélange alpha avec un double tampon.

Un conseil?

+0

Je ne comprends pas. Ne sauvegardez pas e.Graphics (ne fonctionnera pas), enregistrez le bitmap. Créez-le lorsque le texte du message est affecté. –

+0

J'ai mis à jour ma question. Je pense que si je peux enregistrer des graphiques sur un bitmap, j'utiliserais un double buffer avec. – VansFannel

Répondre

0

Here est un moyen de prendre un instantané d'une application s'exécutant sur Windows Mobile, sans prendre la barre de titre et le menu.

Ceci est l'image que je cherchais pour démarrer le double tampon.

0

Exactement comment faire cela est en fait assez compliqué - plus compliqué qu'une simple réponse ici peut fournir. Jetez un oeil à la source pour Project Resistance. Nous avons un formulaire à double tampon et nous peignons dans un arrière-plan et des contrôles avec un canal alpha de transparence.

+0

Faites-vous la même chose que je veux faire? – VansFannel

+0

Regardez le code. Il peint un fond, puis une image avec de la transparence en plus de cela. Si vous voulez utiliser la transparence et la double mise en mémoire tampon, c'est le seul exemple dont je suis conscient. – ctacke