IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

MoveWindow : scintillements


Sujet :

Windows

  1. #1
    Membre habitué Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Points : 137
    Points
    137
    Par défaut MoveWindow : scintillements
    Bonjour à tous,
    J'ai développé une application où les controles se déplacent et se dimensionnent selon la taille de la fenêtre. (Je ne sais pas si c'est important mais je travaille avec VS6 sous winXP)
    Pour effectuer ces opérations, j'utilise MoveWindow. Le problème, c'est que lorsque je redimensionne ma fenêtre manuellement (cad avec le bord de la fenetre), mes controles scintillent.

    Voici mon code si ça peut aider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    case WM_SIZE:								
    		rt.right = LOWORD(lParam);
    		rt.bottom = HIWORD(lParam);		
    		
    		rt.right -= OldRect.right;	// Obtenir la différence de position
    		rt.bottom -= OldRect.bottom;
    
    		lvInfos.setRelSize(rt.right, rt.bottom);	// Modifier la hauteur et la largeur
    		cboProcess.setRelSize(rt.right, 0);				// -------- la largeur
    		gbProcess.setRelSize(rt.right, 0);				// -------- la largeur
    		btnRefresh.move(rt.right, 0);							// Déplacement horizontal
    
    		/***** Sauver le nouveau rectangle client *****/
    		OldRect.right += rt.right;
    		OldRect.bottom += rt.bottom;
    		break;
    
    	case WM_SIZING:
    
    		/****** Empecher une diminution trop forte *****/
    		#define RECTLPARAM ((LPRECT)lParam)					
    		if&#40;&#40;RECTLPARAM->right - RECTLPARAM->left&#41; < 300&#41;
    			RECTLPARAM->right = RECTLPARAM->left + 300;
    		if&#40;&#40;RECTLPARAM->bottom - RECTLPARAM->top&#41; < 300&#41;
    			RECTLPARAM->bottom = RECTLPARAM->top + 300;			
    		break;
    J'ai fait un essai en mettant le code de WM_SIZING en commentaire et celà scintillait toujours donc logiquement celà vient de WM_SIZE, mais on ne sait jamais.

    lvInfos est une listview, gbProcess est un groupbox, cboProcess est un combobox et btnRefresh est un bouton. Les méthodes qu'ils utilisent utilisent toutes MoveWindow en interne (et il n'y a quasi pas de code supplémentaire).

    Si quelqu'un sait comment empecher ou diminuer le scintillement je suis preneur

    Merci d'avance,
    Crisanar

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    La faut est à la fenêtre parent. Une solution simple peut être de virer les styles CS_HREDRAW| CS_VREDRAW de sa classe. Sinon faut gérer l'évènement WM_ERASEBKGND et ne rien lui faire faire.

  3. #3
    Membre habitué Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Points : 137
    Points
    137
    Par défaut
    Salut Aurelien,
    Je viens de tester en gérant l'évenement WM_ERASEBKGND et en ne faisant rien mais ma fenêtre est toute baveuse ensuite, il faut peut-être que je fasse un UpdateWindow() qqe part?!

    Sinon je suis en train d'essayer de virer les styles CS_HREDRAW et CS_VREDRAW mais je n'arrive pas à jouer correctement avec les masques binaires.

    Voici comment je procède
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    style = GetClassLong&#40;hDgl, GCL_STYLE&#41;;
    style &= !&#40;CS_VREDRAW | CS_HREDRAW&#41;;
    SetClassLong&#40;hDlg, GCL_STYLE, style&#41;;
    Mais à la 2eme ligne style vaut 0 car après essai, !(CS_VREDRAW | CS_HREDRAW) vaut 0, mais je ne comprends pas pourquoi

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Tu la crée où ta fenêtre principale ? Sinon, 0 comme style ça devrait aller.

  5. #5
    Membre habitué Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Points : 137
    Points
    137
    Par défaut
    (J'ai trouvé pourquoi mon 'not' ne fonctionnait pas, je ne devais pas utiliser ! mais bien ~ )

    Après tests ma fenetre était bien créée sans CS_VREDRAW et CS_HREDRAW, et effectivement si je les définissais, ma fenêtre scintillait encore plus.

    Tu la crée où ta fenêtre principale ? Sinon, 0 comme style ça devrait aller.
    J'utilise une dialog, donc je la crée en ressource.

Discussions similaires

  1. Comment dessiner sur un Bitmap sans scintillement ?
    Par TOTO32 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 10/01/2005, 10h11
  2. Scintillement des textures
    Par polonain2 dans le forum OpenGL
    Réponses: 18
    Dernier message: 08/06/2004, 10h01
  3. Pb scintillement-stabilité lors réaffichage de JPanel
    Par Pill_S dans le forum Composants
    Réponses: 5
    Dernier message: 28/04/2004, 14h03
  4. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 09h21
  5. [appli][Java2D]Pb scintillement Animation
    Par ddams dans le forum 2D
    Réponses: 2
    Dernier message: 25/04/2003, 11h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo