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

MFC Discussion :

[evc4] Rafraichir l'affichage


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Par défaut [evc4] Rafraichir l'affichage
    Bonjour,
    Je reposte mon dernier post mais en séparant les problèmes cette fois, en espérant que ça vous inspire d'avantage.
    Je programme actuellement sous visual C++ embedded 4 pour windows CE 5.0 et... je n'arrive pas à forcer le rafraichissement de l'affichage. Le but est de faire varier l'affichage lors de l'initalisation du programme. Par exemple faire dérouler une barre de progression automatiquement à l'ouverture du programme. Premier problème : tant que l'initialisation n'est pas terminée, la fenêtre ne souvre pas entièrement. Alors comment modifier l'affichage automatiquement (sans intervention extérieur)? En utilisatn WM_PAINT, j'arrive à terminer l'initialisation (donc ouverture de la fenêtre) et à lancer un programme automatiquement (par exemple, un compteur qui s'incrémente). Avec la fonction SetWindowText, j'arrive à afficher ce compteur, par contre je ne trouve pas un équivalent pour les images ! si je change une image, elle ne s'affiche qu'à la fin (fermeture de mon "WM_PAINT"). Donc, comment forcer l'affichage de mon image ?

    Voilà, ça me parait complexe alors j'espère que c'est clair. Merci de m'éclairer. N'hésitez pas à me demander des précisions !

    Caro

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    j'avoue que pour moi, ce n'est pas très clair
    Tu pourrais, par exemple, nous donner du code.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Par défaut
    Bonjour,

    Donc j'essaie de préciser (je suis pas sur que le code t'éclairera...). A l'ouverture de mon programme principal, j'ouvre une autre fenêtre en premier plan, genre "Démarrage de Windows" ou ce genre de truc. Je fais la liste de ce que je démarre (par exemple le disque dur, la ram, la carte graphique, je précise que c'est des exemples bidons) et mon but c'est de montrer une case cochée devant chaque élément qui a démarré avec succès. Ce programme se déroule donc tout seul sans intervention de l'utilisateur. Le programme ressemble à ça :

    Le .cpp :

    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
     
    BOOL CDlgDemarrage::OnInitDialog() 
    {
        CDialog::OnInitDialog();
        // TODO: Add extra initialization here
    c_prog.Create_ProgressBarColor(IDB_CASE1,IDB_CASE1,IDB_CASE2,IDB_CASE3,IDB_CASE4,IDB_CASE5,IDB_CASE6,IDB_CASE7,IDB_CASE8,IDB_CASE9,IDB_CASE10,IDB_CASE11,IDB_CASE12,IDB_CASE13,IDB_CASE14,IDB_CASE15,IDB_CASE16,IDB_CASE17,IDB_CASE18,IDB_CASE19,IDB_CASE19,0,100);
        cpt=0;
        return TRUE;  // return TRUE unless you set the focus to a control
                      // EXCEPTION: OCX Property Pages should return FALSE
    }
    //C'est ici qu'est créée l'image (une progressbar améliorée)
     
    void CDlgDemarrage::OnPaint()   //Cette fonction s'active automatiquement après OnInitDialog
    {
        CPaintDC dc(this); // device context for painting
        // TODO: Add your message handler code here
        for (int i =0;i<20;i++)
            { 
            cpt=cpt+5;
        c_prog.progress(cpt);                               //On change l'image, c'est à dire on coche la case
        tmp.Format(_T("%i"),cpt); 
        c_val_NRJ.SetWindowText(tmp);                //On met à jour un CEdit
            }
     
        // Do not call CDialog::OnPaint() for painting messages
    }
    J'ai mis que le code utile, j'espère qu'il y en a assez. c_val_NRJ, c_prog et cpt sont déclarés dans le .h.
    Le CEdit se met à jour, mais pas l'image.
    J'ai essayé de remplacer le changement d'image par une autre boite de dialog qui souvre sur le devant et contenant juste l'image que je veux, mais la boite de dialog ne s'ouvre pas non plus.

    C'est plus clair ? pas sur

    Bonne journée et merci d'avance pour votre aide
    Caroline
    merci de penser à la balise code ,la prochaine fois Farscape

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 294
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    je commence à comprendre. Je m'excuse, je n'ai pas le temps aujourd'hui de regarder ton problème en profondeur, mais je peux te donner quelques conseils:
    * la fonction OnPaint est appelée à chaque fois que ta fenêtre doit être rafraichie, c'est à dire extrêmement souvent (quand on bouge la souris dessus, sur un resize, un move, etc..). Donc tes mises à jours ne doivent pas se trouver ici (sauf peut-être pour la progress bar, mais je ne crois pas). En fait, il est assez rare de devoir mettre du code dans le OnPaint.

    Hope it helps.

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    comme le signale r0d ,en fait il ne faut rien mettre dans le OnPaint d'une CDialog .
    surtout pas d'initialisation de controle (du moins comme ça)!
    la fonction OnInitDialog est faite pour ça.
    sinon voir ça:
    http://c.developpez.com/faq/vc/?page...CDialogRunTask

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Par défaut
    Ah super ! ça va m'éviter de faire une sacré boulette, merci.
    Je teste de suite, voir si tout se résout comme par miracle.

    Caro

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

Discussions similaires

  1. Rafraichir l'affichage d'une fenêtre
    Par gbrion dans le forum WinDev
    Réponses: 6
    Dernier message: 16/03/2007, 15h08
  2. OnPaint: rafraichir l'affichage
    Par Biosox dans le forum wxWidgets
    Réponses: 2
    Dernier message: 19/12/2006, 14h43
  3. rafraichir l'affichage d'un sous formulaire
    Par tibiurs dans le forum Access
    Réponses: 4
    Dernier message: 31/08/2006, 16h20
  4. débutant : rafraichir l'affichage c++builder
    Par matika dans le forum C++Builder
    Réponses: 3
    Dernier message: 10/03/2006, 12h20
  5. [JFrame] Rafraichir l'affichage d'1 JFrame
    Par tomburn dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 21/04/2005, 11h39

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