Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2972 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  redimensionnement de fenetre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

redimensionnement de fenetre

n°214846
olivier__
Posté le 15-09-2002 à 23:15:05  profilanswer
 

Tout d'abord une précision : je débute et je programme avec les MFC...
Je veux afficher un fichier image .tga à l'écran, je décode le fichier et je l'affiche à coups de BitBlt.  
Jusque là tout va bien, sauf que si je redimensionne la fenêtre dans laquelle se trouve l'image, l'image tremblote et ça fait mal aux yeux (ça ne le fait pas quand je déplace la fenêtre, ou que j'utilise les ascenseurs).
Ma question :
Qu'est ce qui se passe exactement quand je redimensionne la fenêtre?
 
Je pensais bêtement que ça envoyait un message WM_SIZE, et que je pourrais surcharger la fonction CProjectView::OnSize. Seulement le redimensionnement réussi même si ma fonction ProjectView::OnSize est vide!!
Bref, il doit se passer quelque chose de plus qu'un envoi de WM_SIZE et je ne sais pas ce que c'est...
 
Est ce quelqu'un pourrait m'aider?
Merci.
 

mood
Publicité
Posté le 15-09-2002 à 23:15:05  profilanswer
 

n°214849
mrbebert
Posté le 15-09-2002 à 23:28:08  profilanswer
 

Quand tu redimensionnes la fenêtre, ca se fait progressivement. Pas pixel par pixel mais presque. Et, à chaque fois, ton appli reçoit un message lui demandant de redessiner la fenêtre. C'est de là que vient le scintillement.

n°214853
youdontcar​e
Posté le 15-09-2002 à 23:49:21  profilanswer
 

il y a un WM_SIZE, un WM_PAINT (normal), un WM_ERASEBACKGROUND. donc si tu fais un simple BitBlt(), le fond va être effacé, puis ton image affichée par dessus, d'où le scintillement : deux affichages au même endroit en un temps très court. pour l'éviter, tu peux :
 
* surcharger WM_ERASE... et ne pas effacer l'endroit où est l'image. pas très propre.
* changer WM_ERASE... et WM_PAINT en un 'écran virtuel' : tu fais toutes les opérations nécessaires en mémoire, tu blittes d'un coup le résultat -> plus de scintillement. regarde du côté de CreateCompatibleDC() & co.
 
(au passage, WM_SIZE est juste une notification pour que tu puisses mettre à jour ton applic : par exemple si tu affiches du texte aligné à droite de ta fenêtre, il faut updater ses coordonnées).

n°214860
olivier__
Posté le 16-09-2002 à 00:15:06  profilanswer
 

Merci youdontcare:)
J'avais pas encore rencontré le WM_ERASEBACKGROUND...
Je vais essayer le coup de l'écran virtuel:)

n°214863
youdontcar​e
Posté le 16-09-2002 à 00:31:17  profilanswer
 

petite rectification, le nom exact est WM_ERASEBKGND.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  redimensionnement de fenetre

 

Sujets relatifs
Insérer une valeur dans un formulaire depuis une autre fenêtre IEOuverture d'une fenetre de taille minime...
[C#] ouverture fenetre favorisFenetre de confirmation.....
[XHTML strict] Ouvrir un lien dans une nouvelle fenêtre...peut-on détecter la fin de chargement d'une fenetre en PHP?
[resolu][builder] evenement onmousexxx && fenetre opengl[opengl&& c++builder] initialisation de la fenetre
[zindozs] en bas niveau, afficher des pixels dans une fenetreRedimensionnement d'une fenêtre
Plus de sujets relatifs à : redimensionnement de fenetre


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR