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 :

faire dérouler une image avec l'api win32


Sujet :

Windows

  1. #1
    Membre actif Avatar de gdkenny
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 251
    Points : 248
    Points
    248
    Par défaut faire dérouler une image avec l'api win32
    Bonjours, je voudrais faire dérouler une image dans une fenetre
    Pour cela, j'ai trouvé une source sur le msdn:

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/scrollbars/usingscrollbars.asp

    Mais ca ne marche pas terrible:

    -la variable IDM_STC n'est pas déclaré dans l'exemple

    -le déroulement de l'image s'effectue, mais la mise a jour de l'image ne s'opère pas sur le nouvel intervalle affiché:par exemple je fais un scroll horizontal vers la droite, et la partie de l'image qui doit apparaitre a droite
    apparait en 'flou'. par contre, à gauche de l'écran, la partie de l'image qui doit disparaitre disparait bien...

    De plus, le redimensionnement de la fenetre provoque un effacement de l'image...

    J'aimerais bien un ptit coup de pouce, d'autant plus que ca fait un bon moment que je galère la dessus...
    Sur le net je n'ai pas trouvé de code qui marchait pour le scroll d'une image, par contre pour le texte si, mais ce n'est pas ce qui m'interresse!!

  2. #2
    Membre actif Avatar de gdkenny
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 251
    Points : 248
    Points
    248
    Par défaut
    j'ai résolu le problème... je supprimais le hdc la fin du PAINT...

    Mais il reste tout de meme un petit problème: la taille du curseur de la barre de scroll n'est pas proportionnelle à la taille de l'image, le code du msdn ne gère pas ca.

    Savez vous comment faire??

    de plus, lorsque j'agrandi trop la fenetre, les barres de scroll disparaissent, même si l'image est plus grande que la fenetre...

    Pour intégrer les scroll, j'ai mis le parametre WS_HSCROLL | WS_VSCROLL dans le dwStyle de createwindowex. je suppose que par la suite les barres de scroll doivent être gérée par programmation, mais j'avoue ne pas y connaitre grand chose

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Il se passe quoi exactement, dans ton WM_SIZE ?
    Normalement, c'est lui qui (re)définit la taille des scrollbars, jusqu'à les faire griser/disparaitre (selon que le style DISABLENOSCROLL soit activé ou non)
    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.

  4. #4
    Membre actif Avatar de gdkenny
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 251
    Points : 248
    Points
    248
    Par défaut
    voila ce qui ce passe ds le SIZE:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
                             int xNewSize; 
    			 int yNewSize; 
     
    			 xNewSize = LOWORD(lParam); 
    			 yNewSize = HIWORD(lParam); 
     
    			 if (fBlt) 
    				fSize = TRUE; 
     
    			 // The horizontal scrolling range is defined by 
    			 // (bitmap_width) - (client_width). The current horizontal 
    			 // scroll value remains within the horizontal scrolling range. 
     
    			 xMaxScroll = max(bm.bmWidth-xNewSize, 0); 
    			 xCurrentScroll = min(xCurrentScroll, xMaxScroll);
    			 
    			 si.cbSize = sizeof(si); 
    			 si.fMask  = SIF_RANGE | SIF_PAGE | SIF_POS | SIF_DISABLENOSCROLL; 
    			 si.nMin   = xMinScroll; 
    			 si.nMax   = xMaxScroll; 
    			 si.nPage  = xNewSize;
    			 si.nPos   = xCurrentScroll; 
    			 SetScrollInfo(hwnd, SB_HORZ, &si, TRUE); 
     
    			 // The vertical scrolling range is defined by 
    			 // (bitmap_height) - (client_height). The current vertical 
    			 // scroll value remains within the vertical scrolling range. 
     
    			 yMaxScroll = max(bm.bmHeight - yNewSize, 0); 
    			 yCurrentScroll = min(yCurrentScroll, yMaxScroll);
    			 
    			 si.cbSize = sizeof(si); 
    			 si.fMask  = SIF_RANGE | SIF_PAGE | SIF_POS | SIF_DISABLENOSCROLL;
    			 si.nMin   = yMinScroll; 
    			 si.nMax   = yMaxScroll; 
    			 si.nPage  = yNewSize; 
    			 si.nPos   = yCurrentScroll; 
    			 SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
    en fait c'est l'exemple à la lettre pret du msdn

    la taille du 'thumb' de la scrollbar est renseignée par si.nPage,
    et eux ils le mettent a jour par la nouvelle taille de la fenetre apres son redimensionnment il me semble.

    Mais ca ne suffit pas!! je me trompe peut-être, mais il doit falloir effectuer une opération par rapport a la taille totale de l'image, un truc du genre...
    une division ou une soustraction. je vais bientot tester ca.

    Par contre,oui, pour la disparition des scrollbar c'était 'normal'. j'ai rajouté
    SIF_DISABLENOSCROLL pour régler ca.
    Le fait que les scrollbars se grisent alors que l'image n'est pas totalement affiché vient peu-etre du fait que si.nPage est mal géré?
    Je seré bientot fixé.

    Comment gère tu si.nPage toi?

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 518
    Points
    41 518
    Par défaut
    pour si.nPage, je crois bien que je mete la hauteur (pour la scrollbar verticale) de la fenêtre.

    Ce qui t'intéresse, c'est ce qu'il y a dans le xMaxScroll/yMaxScroll= : c'est là que tu dois mettre les dimensions de ton image, et normalement, ça doit marcher...
    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.

  6. #6
    Membre actif Avatar de gdkenny
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 251
    Points : 248
    Points
    248
    Par défaut
    autant pour moi.
    Effectivement, ca marche comme ca...

    Mais regarde bien le code que g posté:d'apres msdn, le nMax
    c'est la longueur de l'image-sa nouvelle taille...
    Je n'aurais jamais penser a douter d'eux...
    Je serais moins étonné comme ca la prochaine fois qu'il diront des betises

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Oui, c'est la longueur de l'image moins celle de la fenêtre : Quand la fenêtre est plus petite que l'image, c'est égal à la taille de la partie cachée...
    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.

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

Discussions similaires

  1. modifier le thème d'une fenêtre avec l'API win32
    Par d'Oursse dans le forum Windows
    Réponses: 9
    Dernier message: 19/02/2012, 16h03
  2. [AC-2010] Faire apparaitre une image avec une case à cocher
    Par Squatina dans le forum IHM
    Réponses: 2
    Dernier message: 20/03/2011, 10h01
  3. [XL-2007] Faire apparaitre une image avec condition
    Par uffo86 dans le forum Excel
    Réponses: 13
    Dernier message: 11/05/2010, 09h59
  4. Comment faire disparaitre une image avec javascript?
    Par menoulette dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/09/2009, 18h29
  5. Faire clignoter une image avec la SDL?
    Par francoisd42 dans le forum SDL
    Réponses: 2
    Dernier message: 29/04/2009, 16h31

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