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 :

Gestion des scrollbar?


Sujet :

Windows

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 31
    Points : 24
    Points
    24
    Par défaut Gestion des scrollbar?
    Je cherche deséspeemment sur le net comment gérer les scrollbar : j'ai un projet qui utilise l'API windows; lors de la création de ma fenêtre, j'ai indiqué en paramètres WS_HSCROLL et WS_VSCROLL : des "ascenseurs" sont bien apparus sur les côtés. Cependant, ils sont "morts", c'est à dire que si je trace quelquechose qui sort du cadre de ma fenêtre, je en pourrais pas y accéder, les ascenseurs ne descendent pas... Et impossible de trouver quoi que ce soit la dessus sur le net... Quelqu'un est au courant?

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 31
    Points : 28
    Points
    28
    Par défaut
    regarde sur msdn
    ScrollWindowEx
    GetScrollInfo
    SetScrollPos
    SetScrollInfo

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Et les messages WM_HSCROLL et WM_VSCROLL.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Je ne comprend pas trop, quand on parle de fenêtre ou d'aire client (client area) : est ce que l'aire client est celle qui est visible ou bien la totale si il n'y avait pas de scrollbar? De plus, je n'arrive toujours pas à rendre "vivant" les ascenceurs : la fonction ScrollWindowEx créé des scrollbar tout comme les options WS_HSCROLL et WS_VSCROLL mais ne permet pas de les activer... Autre Question, quand je définis par exemple dans ma fonction createWindow une taille de 800 par 800, s'agit-t-il de la taille de la fenêtre ou de la zone de travail délimitée par les scroll bar?
    Merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    1. Les scrollbars standard d'une fenêtre ne font pas partie de sa zone client.
    2. Une scrollbar est "vivante" si ta fenêtre traite les messages WM_HSCROLL et WM_VSCROLL.
    3. La taille passée à CreateWindow() est la taille totale de la fenêtre. Tu peux obtenir la taille totale de la fenêtre à partir de celle de la zone client avec la fonction AdjustWindowRect() ou AdjustWindowRectEx(), tant que tu n'as pas une fenêtre trop petite avec un menu: La fonction ne prévoit pas qu'un menu puisse faire plusieurs lignes.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Alors en gros pour faire un petit récapitulatif de ce que je dois faire si j'ai bien compris pour créer une fenêtre avec des ascenceurs :

    1. Créer une fenêtre normale avec les options WS_HSCROLL et WS_VSCROLL dans la fonction CreateWindow() qui créé ma fenêtre
    Ceci fait simplement apparaitre les barres

    2. Détailler des cas case WM_HSCROLL et WM_VSCROLL dans la procédure de fenête principale.

    Très bien, mais ce que je ne saisis pas c'est si ma fenêtre fait 500 par 500, il va falloir que ma zone client fasse plus de 500 par 500 pour pouvoir activer les barres n'est-ce pas?

    De plus, ou est ce que je règle la taille de ma zone client?

    Enfin, à quoi me sert SetScrollInfo() dans ce cas?

    Je sais ca fait beaucoup de questions, mais la doc en anglais sur msdn n'est pas toujours très claire...

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Ce n'est pas ta zone client qui doit faire plus de 500*500 : C'est ce que tu veux afficher.
    SetScrollInfo est une alternative à d'autres fonctions liées aux scrollbars. Il me semble que certaines fonctions ne supportent pas des valeurs supérieures à 65535, d'autres si.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Ok... Alors si je créé une fenêtre de 500 fois 500 puis que je trace un trait qui va du pixel 30 30 de ma fenêtre au pixel 600 fois 600, la je pourrais faire fonctionner les scrollbar?

    De plus, comment je fais pour dire à l'ordinateur : "en cas de WM_HSCROLL, si loword vaut left, DECALE DE UNE UNITE A DROITE"?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 31
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par funkyspirit
    Ok... Alors si je créé une fenêtre de 500 fois 500 puis que je trace un trait qui va du pixel 30 30 de ma fenêtre au pixel 600 fois 600, la je pourrais faire fonctionner les scrollbar?
    le fait de dessiner en dehors de la zone visible ne rend pas actif les scrollbars
    c'est à toi de gérer ces cas

    Citation Envoyé par funkyspirit
    De plus, comment je fais pour dire à l'ordinateur : "en cas de WM_HSCROLL, si loword vaut left, DECALE DE UNE UNITE A DROITE"?
    la methode ScrollWindow ou ScrollWindowEx te permet de faire ce décallage

    La méthode SetScrollInfo va te permettre de définir la "taille" de tes scrolls


    pour des exemples de code :
    http://msdn2.microsoft.com/en-us/library/ms651269.aspx

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Le plus simple pour jouer avec les scrollbars, c'est de créer un bitmap plus grand que la zone client, et de dessiner "la partie visible" de ce bitmap dans le traitement du message WM_PAINT.
    Et cette partie visible, tu obtiens ses coordonnées avec des GetScrollInfo() (si tu as pensé à régler la portée des scrollbars avant)...

    Avec ça, tout ce que tu auras à faire dans ton traitement des messages WM_HSCROLL et WM_VSCROLL, c'est faire un InvalidateRect() de toute la fenêtre pour redessiner l'image.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    J'ai peut etre l'air de faire que poser des questions mais régler la portée des scroll bars, je sais pas faire...

    Et en plus, je ne créé pas de bitmap, je fais seulement des traits sur ma fenetre principale...

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    SetScrollInfo() pour régler la portée des scrollbars.
    Et si tu ne fais que dessiner des traits, ben, c'est encore plus facile: tu as des coordonnées, il suffit d'y ajouter un nombre, que tu fais varier avec les scrollbars...

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 31
    Points : 24
    Points
    24
    Par défaut
    Mon problème se règle peu à peu grâce au lien que vous m'avez filé sur msdn... Cependant, est ce quelqu'un sait comment effacer le contenu de ma fenêtre? Si j'ai tracé des traits etc et je veux tout réinitialisé, c'est à dire tout effacé? N'existe-t-il pas une fonction du type ClearWindow?

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 31
    Points : 28
    Points
    28
    Par défaut
    tu peux utiliser la methode ShowWindow (HWND, BOOL)

    mais dans ton cas, je pense, qu'une propriete TRUE/FALSE que tu geres dans WM_PAINT qui affichera ou pas les objets

    tu peux aussi gerer une liste d'objets qui se dessinent dans WM_PAINT
    et quand tu veux tout effacer, tu vides ta liste .
    et comme WM_PAINT va afficher les elements de ta liste, si elle est vide, il n'affichera rien

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Typiquement, InvalidateRect() avec le dernier paramètre à TRUE causera un effacement de la fenêtre avant que le message WM_PAINT arrive.

Discussions similaires

  1. [TextBox] [listBox] gestion des scrollbars
    Par maxdwarf dans le forum Windows Forms
    Réponses: 1
    Dernier message: 22/01/2008, 14h36
  2. [reseaux] Gestion des threads en perl
    Par totox17 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 28/11/2002, 10h40
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 13h44
  4. Réponses: 4
    Dernier message: 04/07/2002, 13h31
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 15h11

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