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 :

Modifier la taille d'une Scrollbar dans une CListCtrl


Sujet :

MFC

  1. #1
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut Modifier la taille d'une Scrollbar dans une CListCtrl
    Bonjour,

    Je suis en train de travailler sur une application qui utilise quelques CListCtrl.
    On me demande d'afficher le nombre de ligne dans cette liste.

    Soit j'ai la possibilité d'afficher ce chiffre dans un CStatic tout moche à coté de la liste. Et il faut que je le fasse à chaque fois à la main.

    Soit j'essaye d'intégrer une petite zone d'affichage à même la liste. J'imaginais un affichage au niveau de la ScrollBar en bas de la liste.
    Pour cela il faudrait que puisse réduire la taille de la Scrollbar horizontale. Mais je ne sais pas comment faire.

    Avez vous une idée ? Sachant qu'actuellement j'utilise une classe dérivée d'un CListCtrl sans grande modification.
    J'ai peur qu'on me réponde de gérer moi même ma Scrollbar. Ca c'est pas cool.

    En tout cas merci d'avance pour vos suggestions.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Gérer par toi même la scrollbar: non peut être pas complètement, mais seulement son emplacement. Tu as un ctrl static et tu gère sa place et celle des scrolls bar avec DeferWindowPos (en général dans OnSize).

  3. #3
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    Mais alors quel est l'ID du scrollbar ?
    Sans ça je ne pourrais pas le controler.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Points : 116
    Points
    116
    Par défaut
    Je crois que tu peux récupérer un pointeur sur la scrollbar avec GetScrollBarCtrl.

  5. #5
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    Effectivement il existe cette fonction dans CWnd mais elle n'est vraiment implémentée que dans la classe CView.

    J'ai l'impression qu'il faut que je crée une scrollbar à moi et en surchargeant la fonction GetScrollbarCtrl, j'aurais le même traitement que habituellement.

  6. #6
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    Bon ba malheureusement ça ne fonctionne pas.

    J'ai testé également en bouclant sur les fils de la liste mais je trouve pas les scrollbar.

    C'est donc un mystère. Je ne sais vraiment pas quoi faire.
    J'ai l'impression que cette méthode est morte.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Une autre piste: passer par CHeadCtrl: tu rajoutes ta static à ce niveau et c'est là que tu gère les emplacements? C'est une hypothèse donc je ne sais pas ce que cela peut valoir.

  8. #8
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    Maintenant je suis en train de réfléchir à virer les scrollbar et les mettre moi même.
    Mais je bute sur une connerie. Je veux modifier la taille de la client area pour mettre mes scrollbar à moi. Je n'arrive pas à trouver cette information sur le net.

    Je sais que c'est possible, j'ai déjà vu un contrôle avec la zone cliente différente que celle prévu à l'origine.
    Malheureusement je n'ai plus ce code sous la main.

    Quelqu'un aurait la solution ?

    Merci d'avance

  9. #9
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    Je viens de trouver avec chercher encore, encore, ...

    Bref, c'est en utilisant le message WM_NCCALCSIZE.

    bon maintenant il ne me reste plus qu'à ajouter mes scrollbars.
    Le plus dur est fait... Bon ok je déconnes, le plus gros est à venir.

  10. #10
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    J'ai réussi à modifier la client area en interceptant le NM_NCCALCSIZE.
    J'y ajoute les scrollbars dans la no-client area.
    J'ai réussi à faire disparaitre les anciennes scrollbar.

    Par contre il y a des soucis

    Bizarrement les données qui sont à droite de la liste sont coupé par la non cliente area. Je ne comprend pas.
    En fait c'est comme si le calcule de la valeur max des scrollbars été mal calculé. Pour faire ce test, j'ai fait apparaitre les scrollbars et je les ai utilisés.

    Sinon je ne sais pas comment synchroniser parfaitement les scrollbar avec la liste.

  11. #11
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par vanitom Voir le message
    Bizarrement les données qui sont à droite de la liste sont coupé par la non cliente area. Je ne comprend pas.
    En fait c'est comme si le calcule de la valeur max des scrollbars été mal calculé. Pour faire ce test, j'ai fait apparaitre les scrollbars et je les ai utilisés.
    Ca ressemble effectivement à un pb de calcul de taille.

    Citation Envoyé par vanitom Voir le message
    Sinon je ne sais pas comment synchroniser parfaitement les scrollbar avec la liste.
    Ben, là va falloir le gérer à la main. Récupérer les évènements scrollbar et en déduire ta plage d'affichage et inversement, à partir de ta plage d'affichage gérer la position de la scrollbar.
    Bon courage, car dans ce cas étourderies garanties

  12. #12
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    Ba en fait, je ne crois que j'aurais le courage et surtout le temps de faire tout ça.

    Par contre j'avais une idée secondaire. Forcer les scrollbars a être visible en permanence et dessiner un bouton dans le petit coin en bas à droite. Il permettra afficher un menu contextuel générique.

    J'arrive à détecter le clic avec le message WM_NCLBUTTONDOWN.

    Par contre je n'arrive pas à dessiner dans la zone non cliente même en utilisant le message WM_NCPAINT.
    Soit j'arrive à afficher un truc mais je n'ai plus le contenu de la liste.

    Je commence à être perdu.

  13. #13
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Soit brutal: créé un petit contrôle que tu positionnes et que tu force à être au dessus de ta liste.

  14. #14
    Membre régulier Avatar de vanitom
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 327
    Points : 85
    Points
    85
    Par défaut
    C'est vrai. Je vais suivre un conseil d'un pote non informaticien:
    Quand ça ne passe pas en bourinant, bourine plus.
    C'est une bonne idée.

    Le dernier détail c'est de savoir comment afficher en permanence les scrollbars.
    Une idée ?
    Peut être en utiliser les fonctions basées sur "InitializeFlatSB".

  15. #15
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par vanitom Voir le message
    Le dernier détail c'est de savoir comment afficher en permanence les scrollbars.
    Une idée ?
    N'as tu pas dis que tu les créais à la main? Tu gère donc leur affichage non?
    Citation Envoyé par vanitom Voir le message
    Peut être en utiliser les fonctions basées sur "InitializeFlatSB".
    ?

Discussions similaires

  1. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 20h05
  2. Réponses: 1
    Dernier message: 04/04/2008, 13h14
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 27/08/2007, 00h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 11h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 14h48

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