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 :

Rafraîchissement d'une fenêtre


Sujet :

Windows

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 83
    Points
    83
    Par défaut Rafraîchissement d'une fenêtre
    Bonjour,

    j'ai un petit soucis qui nécessite un peu d'aide :

    J'ai créé un programme qui fait des calculs sur un gros fichier pour en extraire une partie (temps d'exécution environ 20mn). Ce programme tourne en boucle sur plusieurs fichiers. Je mets dans un editbox l'avancement de la conversion pour chacun des fichiers. Le problème c'est que si j'ouvre une autre fenêtre pour faire patienter le temps de la conversion, ma fenêtre programme n'affiche plus jamais l'avancement de mes conversions, comme si je perdais le focus. J'ai beau insérer un "UpdateWindow(MainHandle)" rien y fait j'ai toujours ma fenêtre qui est vide. Évidemment à la fin d'exécution du prog j'ai tout l'avancement qui arrive d'un bloc dans ma fenêtre mais cela me fait une belle jambe ...

    Comment pourrai-je forcer ma fenêtre à revenir sur le devant de l'écran à chaque fois qu'un traitement est fini et avant que le prog en recommence un autre ?

    J'ai essayé avec "ShowWindow(HWND,SW_SHOW)" mais cette fonction m'ouvre une deuxième fenêtre de mon programme ?!?!

    Merci du coup de main

    Taiby

  2. #2
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Bonjour.

    Au lieu de faire un UpdateWindow avec le handle de la fenêtre principale, essayez un UpdateWindow avec le handle de l'editbox.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 83
    Points
    83
    Par défaut
    Merci, j'ai essayé mais j'ai une erreur à la compilation. Un extrait de mon code est :
    SendMessage(EditHandle, EM_REPLACESEL, 0, (LPARAM)mess_resultat.c_str());
    // Met à jour la fenêtre
    UpdateWindow(EditHandle);
    et j'ai l'erreur suivante :
    permission denied,
    hwnd return 1

    mais l'erreur a disparue et cela ne rafraichit toujours pas la fenêtre !!

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    On se calme et on reste Zen.

    Quand vous faites un "UpdateWindow(MainHandle)", vous postez indirectement sur cette fenêtre un message WM_PAINT. C'est lui qui met en branle le rafraichissement de votre affichage.

    Si vous ne faite pas de multi-threading, personne ne dépile le message WM_PAINT si votre thread principal est occupé.

    Le plus simple est donc d'avoir un thread de travail et le thread d'affichage qui poste des messages d'avancement. Le thread d'affichage n'aura qu'à gérer la barre de progression.

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 83
    Points
    83
    Par défaut
    D'accord, l'idée c'est donc de créer une progress-bar pour débloquer le rafraîchissement de mon editbox, mais cela me fait rajouter du temps d'exécution et d'affichage sur mon programme de conversion qui est déjà assez lourd.
    Je vais essayer de coder cela et je vous tiens au courant

    Merci Bacelar

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Rajouter du temps d'exécution en tout cas pas ! De toute façon, tu veux cet affichage

    Dans l'idéal, les tâches devraient être réparties sur plusieurs processeurs (ou sur plusieurs coeurs) en fonction de leur disponibilité (l'OS s'en charge). Alors que dans un application mono-tâche, un seul processeur sera sollicité et devra par conséquent répartir son temps d'exécution entraînant forcément une diminution des performances.

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Points : 83
    Points
    83
    Par défaut
    Comme conseillé par Bacelar j'ai créé deux Thread pour mes applications qui avant étaient lancées depuis la procédure de gestion de mon editbox et tout fonctionne parfaitement.

    J'ai fait un grand pas aujourd'hui en apprenant à travailler avec les Threads, merci encore Bacelar

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rafraîchissement d'une fenêtre
    Par stassiona dans le forum Scheme
    Réponses: 3
    Dernier message: 24/12/2006, 17h35
  2. Changer l'icône d'une fenêtre à partir d'un .res
    Par henderson dans le forum C++Builder
    Réponses: 8
    Dernier message: 11/03/2003, 10h48
  3. Rendre le curseur invisible sur une fenêtre donnée
    Par Meuhmeuh dans le forum C++Builder
    Réponses: 3
    Dernier message: 22/11/2002, 12h25
  4. Créer une fenêtre flottante qui ne peut avoir le focus
    Par BestofMac dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/07/2002, 10h46
  5. icône d'une fenêtre fille
    Par bastien dans le forum C++Builder
    Réponses: 6
    Dernier message: 27/05/2002, 13h46

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