Pb : Slider Control MFC (fonction SetTic && fonction SetPos)

romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 17 avril 2013 - 4 févr. 2009 à 10:40
romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 17 avril 2013 - 4 févr. 2009 à 14:43
Bonjour a tous,

J'ai un petit souci concernant un slider control voici mon problème :



Quand je souhaite mettre des Tic sur un slider, je compile (aucune erreur lors de la compilation) mais lorsque j'exécute mon programme le slider n'apparait pas !
De plus quand je donne une position au slider même chose, il n'apparait pas.
J'ai essayé pas mal de fonction relative a Slider et a chaque fois le même résultat.
En revanche lorsque je n’utilise pas les fonctions SetTic & SetPos tout fonctionne normalement…




Mon code est le suivant :



void CControlDlg::OnNMCustomdrawControldata(NMHDR *pNMHDR, LRESULT *pResult)

    LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
   CSliderCtrl *pSlider=static_cast<CSliderCtrl *>(GetDlgItem(IDC_CONTROLDATA));


    pSlider->SetRange(0,1279); // Définit la plage du slider
    pSlider->SetPos(640);   // Met le curseur en position centrale
    pSlider->SetTic(640);   // Met un Tic au centre
    int n = pSlider->GetPos();      // Récup la position du slider
    *pResult = 0;


}


Où se situe mon problème?
Merci de votre aide


Romain


Config : XP Pro sp3 / Visual Studio 2005

6 réponses

BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
4 févr. 2009 à 10:54
Hello,
Il faut utiliser InitCommonControls() avant la création de ta dialog

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 17 avril 2013 1
4 févr. 2009 à 11:37
Merci de la solution proposé  !

Je place l' InitCommonControls() avant la création de la boite de diag mais cela ne résoud pas le problème.
Je viens de voir que quand je fixe une position (ex : 640 la moitié) le slider le prend bien en compte c'est a dire que c'est uniquement l'affichage qui bug.

ps : j'ai bien vérifié les propriétés de mon slider tout est Ok !
 
Avez vous d'autres solutions envisagable pour résoudre mon problème?

Romain
0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
4 févr. 2009 à 11:58
As-tu besoin de la fonction SetTic()? Perso, je ne l'ai jamais utilisé, le SetPos() suffit

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 17 avril 2013 1
4 févr. 2009 à 12:11
Oui j'ai besoin du SetTic, il met (logiquement quand sa marche) des petits traits qui te servent de repères.
J'ai enlevé le SetTic pour voir si c'était lui qui bugé mais non toujours le même problème.

Romain
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
4 févr. 2009 à 14:24
Ben je viens de tester chez moi, ça fonctionne...
Dans les propriétés de mon Slider, j'ai mis "Tic Marks" à True, c'est tout ce que j'ai fait de "spécial"
Peut-être qu'ailleurs dans ton code, tu ré-initialise la position de ton slider...

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
romain60112 Messages postés 70 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 17 avril 2013 1
4 févr. 2009 à 14:43
J'ai trouvé mon erreur la voici :
En faisant  pSlider->SetPos(640); dans ma fonction OnNMCustomdrawControldata(....); je redéfinit a chaque passage le range du control bar, du SetPos et du Set Tic !

Pour éviter cela j'ai définit mon pointeur pSlider en global et ensuite je l'initialise qu'une seul fois dans l'init dialog.
Voici ce que cela donne :




BOOL CControlDlg::OnInitDialog()
{
  CDialog::OnInitDialog();
  SetIcon(m_hIcon, TRUE);

// Set big icon

  SetIcon(m_hIcon, FALSE);

// Set small icon

  CSliderCtrl *pSlider=

static_cast
<CSliderCtrl *>(GetDlgItem(IDC_CONTROLDATA));
  pSlider->SetRange(0,1279);

// Slider de 1280 pts

  pSlider->SetPos(640);


  pSlider->SetTic(640);
 

return
TRUE;

// return TRUE unless you set the focus to a control

}
.......................
void
CControlDlg::OnNMCustomdrawControldata(NMHDR *pNMHDR, LRESULT *pResult)



{  LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
    CSliderCtrl *pSlider=
static_cast<CSliderCtrl *>(GetDlgItem(IDC_CONTROLDATA)); 
 
  int n = pSlider->GetPos();
  
*pResult = 0;
}

Merci buno de m'avoir éclairé !

A bientôt....

Romain
 
0
Rejoignez-nous