Problème scroll bar

Signaler
Messages postés
5
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
15 avril 2003
-
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
-
Je souhaite integrer une scroll bar pour faire varier une valeur.
Quand je bouge le curseur avec la souris çà marche mais quand j'appuie sur les boutons de chaque côté çà part en vrac de façon aléatoire.
Est ce que quelqu'un à une solution

4 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Salut,
je peux te faire un prog demo si NON mfc.
Alors precise que je ne perde pas de temps pour rien.
ciao...
Messages postés
5
Date d'inscription
mercredi 26 février 2003
Statut
Membre
Dernière intervention
15 avril 2003

C'est bien en MFC que j'ai un problème
Merci quand même
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
8
bonjour Ima,

le ScrollBar est assez "tricky" c'est vrai
je suppose que tu as une boite de dialogue avec ta barre de défilement horizontale
Avec MFC/ClassWizard , tu as un mis un Label lié avec un int m_val et ta barre liée avec un CScrollbar m_scroll
Je suppose aussi que tu as initialisé tout ca dans OnInitDialog
// TODO: Add extra initialization here
m_scroll.SetScrollRange(0,100);
m_scroll.SetScrollPos(10);
m_val="0";

...Que tu as du code semblable à celui que tu peux trouver dans l'aide sur la gestion de HScroll
void CScrollBarDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// Get the minimum and maximum scroll-bar positions.
int minpos;
int maxpos;
pScrollBar->GetScrollRange(&minpos, &maxpos);
maxpos = pScrollBar->GetScrollLimit();

// Get the current position of scroll box.
int curpos = pScrollBar->GetScrollPos();

// Determine the new position of scroll box.
switch (nSBCode)
{
case SB_LEFT: // Scroll to far left.
curpos = minpos;
break;

case SB_RIGHT: // Scroll to far right.
curpos = maxpos;
break;

case SB_ENDSCROLL: // End scroll.
break;

case SB_LINELEFT: // Scroll left.
if (curpos > minpos)
curpos--;
break;

case SB_LINERIGHT: // Scroll right.
if (curpos < maxpos)
curpos++;
break;

case SB_PAGELEFT: // Scroll one page left.
{
// Get the page size.
SCROLLINFO info;
pScrollBar->GetScrollInfo(&info, SIF_ALL);

if (curpos > minpos)
curpos = max(minpos, curpos - (int) info.nPage);
}
break;

case SB_PAGERIGHT: // Scroll one page right.
{
// Get the page size.
SCROLLINFO info;
pScrollBar->GetScrollInfo(&info, SIF_ALL);

if (curpos < maxpos)
curpos = min(maxpos, curpos + (int) info.nPage);
}
break;

case SB_THUMBPOSITION: // Scroll to absolute position. nPos is the position
curpos = nPos; // of the scroll box at the end of the drag operation.
break;

case SB_THUMBTRACK: // Drag scroll box to specified position. nPos is the
curpos = nPos; // position that the scroll box has been dragged to.
break;
}

// Set the new position of the thumb (scroll box).
pScrollBar->SetScrollPos(curpos);
m_val.Format("%d", curpos);//à rajouter pour vérifier le bon Scrolling

UpdateData(false);
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

... et enfin la ligne sur laquelle j'ai commenté ... à rajouter
Ca devrait marcher
A toi de gérer encore plus de fonctionnalités... comme cliquer dans le grisé...
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
8
enfin... m_scroll.SetScrollPos(0);
qui correspond à m_val="0"