Desactiver l'effacement de la fenetre dans un Form

Desactiver l'effacement de la fenetre dans un Form - VB/VBA/VBS - Programmation

Marsh Posté le 06-07-2007 à 23:27:39    

Salut a tous,
j'utilise une librairie graphique (Matrox Imaging Library, pour ceux qui connaissent) qui me permet d'afficher le contenu d'un buffer dans une fenetre. Pour cela, la librairie propose une fonction MdispSelectWindow qui prend en parametre un handle vers la fenetre (HWND). Cette fonction ne provoque pas l'affichage proprement dit, mais associe le buffer avec la fenetre de telle sorte que lorsque la fenetre a besoin d'etre redessinee, la librairie prend la main et dessine ce qui se trouve dans le buffer.  
Avec une fenetre "normale" (en C via Win32) je n'ai aucun probleme. Le contenu du buffer s'affiche. Mais la je dois utiliser Visual Basic et c'est dans un For m que le dessin doit avoir lieu. J'arrive a recuperer un handle de fenetre vers le Form et a le passer a MdispSelectWindow. Seulement voila, il n'y a rien qui s'affiche; ou plutot, le contenu du buffer s'affiche pendant une fraction de seconde, avant d'etre recouvert par la couleur grise du fond du Form.
Je suppose que ce fond gris qui vient recouvrir l'image de mon buffer a pour role d'effacer le contenu de la fenetre avant de la redessiner ... mais le hic c'est que la librairie graphique redessine avant l'effacement .... (je ne sais pas si je suis tres clair ...)
Je suis en train de devenir dingue, alors si quelqu'un a une solution je lui en serais tres reconnaissant.

Reply

Marsh Posté le 06-07-2007 à 23:27:39   

Reply

Marsh Posté le 07-07-2007 à 02:18:53    

Truc qui n'a rien à voir.
 
Je sais qu'en VB, mais aussi en C# ou C++, quand on fait du DirectDraw ou du Direct3D, on peut le faire directement dans une fenêtre, ou en passant par un objet PictureBox.
 
A mon avis, en VB, il te lance un event interne OnPaint qui vient effectivement redessiner les contrôles de ta fenêtre... A commencer par le fond de la fenêtre.
 
Je doute que tu puisses le court-circuiter malheureusement.
 
Par contre, peux-être peux-tu coller ton "For m" dans le OnPaint, histoire de dessiner une fois que VB à redessinné la form.
 
Sinon, reste l'option du PictureBox si ton Matrox Image Library permet d'utiliser aussi ce type de contrôle.

Reply

Marsh Posté le 07-07-2007 à 08:49:20    

MagicBuzz a écrit :

Par contre, peux-être peux-tu coller ton "For m" dans le OnPaint, histoire de dessiner une fois que VB à redessinné la form.


Le probleme est que ca n'est pas moi qui controle le moment de l'effacement de la fenetre, et je ne controle pas non plus le moment ou le buffer est redessine dans la fenetre ... et ces deux moments arrivent dans le mauvais ordre :D
Dans un premier temps, j'avais mis dans le OnPaint du form une fonction qui se chargeait de recuperer le buffer et qui l'affichait manuellement (sans utiliser MdispSelectWindow, donc). Ca marche bien pour les images fixes, mais en fait mon buffer est un buffer de grab et il me sert a afficher ce qui arrive sur une entree video. J'appelais donc RedrawWindow/InvalidateRect apres chaque grab, j'avais beau essayer toutes les options pour qu'il n'efface pas la fenetre avant, ca n'etait pas pris en compte, et ca scintillait horriblement.
 
Je vais plutot essayer la PictureBox, mais a mon avis ca va etre le meme probleme. Quand bien meme la PictureBox ne souffrerait pas d'un effacement systematique, ca ne serait toujours pas le cas de la fenetre parent (le form donc). Enfin bon, je vais essayer quand meme, ca ouvrira peut etre de nouvelles pistes.
 
En tout cas, merci beaucoup d'avoir repondu.
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed