2011-05-10 2 views
0

Je suis en train de créer une application, qui peint des images bitmap brutes sur le hdc du label en utilisant StrechDIBits.Repeindre l'image après être allé en plein écran et revenir en C++/CLI

ptr = g->GetHdc(); 
dc = (HDC)ptr.ToInt32(); 
SetStretchBltMode (dc, COLORONCOLOR); 
StretchDIBits (dc, 0, 0, (int) (LabelPictureShow->Width), (int) (LabelPictureShow->Height), 0, 0, width, height, data, bitmapInfo, DIB_RGB_COLORS, SRCCOPY);  
g->ReleaseHdc (ptr); 

De cette façon, je dessine un flux vidéo complet, une image d'un flux après l'autre, ce qui fonctionne parfaitement. J'ai aussi une fonction qui redimensionne ma forme et étiquette sur tout l'écran pour réaliser un plein écran, qui fonctionne également très bien lors de la lecture vidéo. Mais, quand j'arrête la vidéo ou n'envoie qu'une seule image et que j'appelle la fonction scren complet. Cela ne va pas repeindre l'image et c'est mon problème. J'ai essayé d'utiliser Paint Event, Resize Event à la fois de forme et d'étiquette pour peindre l'image à nouveau après le redimensionnement, mais rien ne fonctionne. Quand je suis en plein écran ou que je reviens à la taille normale, mon image clignote pendant un court instant, mais elle est repeinte par la couleur du contrôle et disparaît. J'ai essayé de mettre le code de peinture avec StretchDIBits partout et rien ne fonctionne. Toute aide ou conseil est vraiment apprécié.

modifier: la chose triste pour moi est que quand je mets le code de la peinture, par exemple, cliquez sur l'événement de l'étiquette, il fonctionne très bien ...

Répondre

0

Résolu en utilisant le contrôle de PaintBox personnalisé utilisé dans d'autres projets . Ce contrôle utilise la méthode OnPaint écrasée dans laquelle l'image est redessinée. D'une certaine manière cette solution fonctionne, mais précédente presque la même solution pas.