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 :

ProgressBar et GWL_STYLE


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Par défaut ProgressBar et GWL_STYLE
    Pour créeer une ProgressBar avec indicateur continu pas de problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    HWND MyProgressBar;
    
    MyProgressBar =CreateWindowEx(WS_EX_STATICEDGE, PROGRESS_CLASS, (LPSTR)NULL,
    		       WS_CHILDWINDOW | WS_VISIBLE |PBS_SMOOTH,
    		       20, 20, 170, 18,
    		       Handle, NULL, HInstance, NULL);
    cependant je voudrais pouvoir basculer à tout moment l'aspect entre "smooth" et petits rectangles
    et j'utilise donc SetWindowLong comme le precise msdn

    Citation Envoyé par msdn
    Remarks

    You can set progress bar styles, in the same way as other common controls, with CreateWindowEx, GetWindowLong, or SetWindowLong.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    HWND MyProgressBar;
    
    MyProgressBar =CreateWindowEx(WS_EX_STATICEDGE, PROGRESS_CLASS, (LPSTR)NULL,
    		       WS_CHILDWINDOW | WS_VISIBLE ,
    		       20, 20, 170, 18,
    		       Handle, NULL, HInstance, NULL);
    
    
    long style = GetWindowLong(MyProgressBar,GWL_STYLE);
    
    //essaie de changement de style
    SetWindowLong(MyProgressBar, GWL_STYLE,style |PBS_SMOOTH  );

    Ce code ne provoque aucune erreur de compilation,GWL_STYLE est bien changé
    mais il n'a aucun effet : la ProgressBar s'affiche toujours avec des petits carrés .


    Ou est mon erreur ?

    NB: je developpe en C++ avec BCB6

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Ce sont des progressbar comment? (bleues ou vertes?)

    Les vertes, même en "smooth", restent en petits carrés, mais le dernier n'est pas forcément rempli à fond.

    Sinon, tu as essayé de redessiner la progressbar? (Un petit InvalidateRect() dessus...)

    En tout cas, je sais qu'avec SetWindowLong(), on peut changer le style "Marquee" d'une PB. Donc, on fdoit aussi pouvoir avec le style "smooth"...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre expérimenté
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Par défaut
    Bizarre moi j'ai des vertes avec des petits carrés..

    j'ai essayé InvalidateRect(..)
    (meme si j'ai du mal à obtenir le rectangle ( j'ai essayé GetClientRect mais ç plante à mon avis par ce LPRECT est pas instancié: ça je sais pas faire en windows)., du coup j'ai entré 0,0,largeur,hauteur manuellement)

    mais aucun effet...

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Le InvalidateRect, tu peux le faire directement sur le HWND de la scrollbar avec un rectangle NULL.

    Si la progressbar est verte, sache que comme je te l'ai dit, elle restera avec des petits carrés. Par contre, il me semble bien que le dernier carré n'est pas forcé d'être rempli à fond (regarde ta progressbar dans IE ou FireFox, par exemple)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre expérimenté
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Par défaut
    Dsl pour les petits carrés j'ai repondu à l'envers.. en fait j'ai les 2 aspects quelque soit la couleur que j'envoie( après des vert il y en a plein )
    ...mais en fait ce n 'est pas ce qui m'interesse...

    J'ai essayé comme tu m'as dis , mais je n'ai pas de résultat avec invalidate,
    (qui a pour fonction d'effacer et de forcer le "redessinnement" de la ProgressBar je crois ).
    je ne suis plus trop sûr que cette fonction me serve car quand j'envoie 1 StepIt , la ProgressBar est redessinée de toute façon.

    Peut être que c'est du à mon environnement (BCB) ,si quelqu'un pouvait tester avec autre chose ....

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    Au sujet de PBS_SMOOTH:
    Note This style is supported only in the Windows Classic theme. All other themes override this style.
    Sinon, , j'ai essayé, avec SetWindowLong, ça ne marche pas (je suis avec VC++ 2005, en API Win32...)

    Et aussi, je m'étais trompé pour les ProgressBar vertes: En mode "smooth" ou non, elles restent en mode "carré par carré", comme les bleues. Je ne sais pas d'où j'ai sorti cette histoire de "carré pas entier"...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre expérimenté
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Par défaut
    Ca me rassure , d'ailleurs meme en Theme Windows Classic ça ne marche pas.

    Seule solution : detruire et recreer la ProgressBar pour passer dynamiquement en mode smooth...

    merci pour ton aide.

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

Discussions similaires

  1. [MFC] afficher une ProgressBar dans une barre d'etat
    Par guillaume21 dans le forum MFC
    Réponses: 5
    Dernier message: 30/03/2007, 11h16
  2. ProgressBar style XP
    Par Rodrigue dans le forum C++Builder
    Réponses: 3
    Dernier message: 08/11/2003, 09h36
  3. comment programmer une progressbar
    Par Choucas dans le forum Paradox
    Réponses: 3
    Dernier message: 13/11/2002, 11h07
  4. ProgressBar avec plusieurs procédures
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 08/09/2002, 18h03
  5. Couleur de ProgressBar
    Par benj63 dans le forum C++Builder
    Réponses: 7
    Dernier message: 04/07/2002, 17h33

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