Accueil > Forum > > > > OnScroll Versus InvalidatRect
OnScroll Versus InvalidatRect
jeudi 23 juillet 2009 à 22:30:47 |
OnScroll Versus InvalidatRect

shorzy
|
Bonjour.
Je voudrais me déplacer dans ma vue. (CView ou ScrollView)
J'ai 2 Possibilité :
1) OnScrollBy()
2) modifier le ViewPortOrg(), puis redessiner la fenêtre
Donnée.
-------
OnScrollBy déplace ma vue comme le ferais une modif du ViewPortOrg()
sauf que le déplacement est plus libre en modifiant le ViewPortOrg().
Problème.
---------
Je vais donc modifier le ViewPortOrg(), pour avoir des déplacements plus Libre.
MAIS
en redessinant la fenetre (Lors duInvalidatRect), j'ai un clignotement de celle-ci.
Chose que je n'est pas en faisant OnScrollBy()
QUESTION.
---------
Quelle est la méthode qu'utilise réellement OnScrollBy() que je pourrais utiliser directement au lieu de Déplacer la fenêtre puis la redessiner.
Merci de m'aider, je galère depuis plusieurs mois.....
Yeeh Baby
|
|
lundi 27 juillet 2009 à 13:54:12 |
Re : OnScroll Versus InvalidatRect

ed73
|
Bonjour,
Il s'agit en fait d'un effet visuel. OnScrollBy ne va invalider que la partie de la fenêtre qui devra être redessinnée, donc il est possible que tu ne vois pas le clignotement si la surface de cette zone est petite.
InvalidateRect invalide la totalité de la fenêtre en l'effaçant, ce qui donne cet effet de clignotement lorsque la fenêtre redessine son contenu.
Il y a plusieurs moyens pour l'éviter.
- InvalidateRect(NULL,FALSE); invalide toute la fenêtre sans effacer ce qui est présent.
- InvalidateRect(&Rect,TRUE ou FALSE); n'invalide que le rectangle spécifié.
- Tu peux intercepter le message WM_ERASEBKGND et retourner FALSE sans rien faire, ce qui fait que la fenêtre ne s'efface pas, ensuite tu effaces manuellement ce que tu veux et tu redessines.
- Enfin tu peux utiliser la technique du double buffer, c'est ce que je préconise car c'est eficace dans tous les cas et ça te permet de gérer plusieurs couches graphiques.
ed73
|
|
lundi 27 juillet 2009 à 22:39:08 |
Re : OnScroll Versus InvalidatRect
|
lundi 27 juillet 2009 à 23:06:34 |
Re : OnScroll Versus InvalidatRect

ed73
|
Bonsoir,
Il est bien évident que la méthode d'implémentation du double buffer dans le lien que tu cites n'est pas la bonne.
Il n'est pas raisonnable de créer les ressources nécessaires au double buffer dans le traitement du message WM_PAINT car non seulement cela consomme de la mémoire mais aussi du temps.
Il reste cependant que c'est la seule et unique méthode te permettant d'éviter le clignotement de ta fenêtre, encore faut-il le gérer correctement.
Quelques pistes :
- Maintenir un objet gérant le double buffer durant le temps d'existence de ta fenêtre.
- Ne créer le bitmap associé que lors d'un redimensionnement de la fenêtre ou encore un créer un une fois pour toute de la taille maximale de l'écran.
- Si le WM_PAINT est généré suite à une action involontaire de ta part, comme par exemple la fermeture d'une popup qui était par dessus ta fenêtre alors ne faire que recopier le contenu su bitmap à l'écran puisque tu l'as déjà dans l'objet qui gère le double buffer.
J'utilise ces techniques depuis des années, en particulier dans des logiciels de cartographie avec des double buffer à plusieurs couches pour par exemple déplacer des objets ou encore pour ne pas recalculer des images complexes à chaque réaffichage et je peux affirmer que ça fonctionne parfaitement sans consommer plus de ressources que nécessaire si on sait les gérer.
Je ne sais pas comment tu as implémenté ton zoom mais il n'y a aucune raison valable pour que ça comsomme plus de ressources. Car finalement, qu'est-ce qu'un zoom ? Ce n'est jamais qu'une différence d'échelle entre les données affichées et la taille de la fenêtre. Une fois que tu connais les coordonnées logiques des données à représenter il te suffit de ne dessiner que les objets dont au moins une partie rentre dans la fenêtre.
ed73
|
|
mardi 28 juillet 2009 à 13:05:24 |
Re : OnScroll Versus InvalidatRect
|
mardi 28 juillet 2009 à 13:40:14 |
Re : OnScroll Versus InvalidatRect
|
Cette discussion est classée dans : color, onscroll, onscrollby, viewportorg, invalidatrect
Répondre à ce message
Sujets en rapport avec ce message
SetTextColor(HDC,COLORREF); [ par Xs ]
salut !j'ai un probleme avec cette fonction que j'ai rencontré par hasard : elle ne marche pas. Je la compile correctement mais il ny'a a aucun effet
Utilisation concrete de setbkcolor [ par dread ]
J'ai mis le code suivant dans WM_INITDIALOG: HDC hdc; COLORREF color; color = RGB(12,12,12); hdc = GetDC(hwnd); SetBkColor(hdc,co
[HOOK]Encore le meme probleme.. [ par bdkiller ]
Salut,Bon, après pas mal d'heures passés là-dessus, j'ai la DLL qui se compile sans erreurs, l'appli principale qui se compile sans erreurs également!
Lib GD avec Visual C++ 6.0, ça plante ... [ par smoitry ]
Salut !Quelqu'un a déjà utilisé la lib GD avec VC++ 6.0 ?J'ai tenté le code fourni en exemple dans la doc de GD :/* Bring in gd library functions */#i
Lire le color buffer [ par RaphAstronome ]
Bonjour,J'aimerais savoir comment on fait pour lire ce qui est affiché a l'écran (color buffer) avec OpenGl. Est il possible de le faire avec le z-buf
conteneur CList dans aplication du type paint [ par andarius40 ]
bonjour,j'apprends le c++ avec le livre visual c++ 6 de ivor horton.(J'en suis au chapitre 6 pour ceux qui ont le livre)Lorsque je compile le programm
selection de couleurs (manipulation d'hexa) [ par aujeanfr ]
Bonjour,Je souhaite supprimer des couleurs sur des images avant de les afficher.Les valeurs en hexa de ces couleurs sont :0xF_F_F_ 0xE_E_E_0xD_D_D_..
Des petites flèches... [ par KuidZ ]
Bonjour Dans certains programmes, à la droite d'editbox attendant des valeurs numriques, on a 2 petites flèches l'une au dessus de l'autre qui perme
CDialog back color [ par indusine ]
Bonjour! Je voudrais changer la couleur de l'arriere plan des fenetres dans une application MFC .Les fenetres sont dérivée de la classe CDialog.Il y a
MFC button color [ par indusine ]
Salut!Dans une application MFC VC++.Comment je fais pour mettre une couleur sur les boutons en arriere plan (derrière le texte) .Les bouton sont dériv
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|