N curseurs dynamiques [Résolu]

Signaler
Messages postés
65
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
20 mai 2009
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
Bonjour, voici mon problème je dispose de plusieurs sliders sur une même fenêtre disposés les uns en dessous des autres qui représentent des plages horaires. Lorsque l'on bouge l'un des curseurs d'un slider il est évident qu'il ne pourra pas être placé avant le curseur le précédant (car heure plus tardive). Je voulais savoir comment il était possible de gérer cela, de récupérer la valeur de chaque slider et savoir lequel a été bougé si jamais on se trompe en les bougeant ?Merci.

60 réponses

Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Tout à fait l'heure. Du curseur survolé.
Quel est le curseur survolé -> ma boucle for un peu plus haut.
Messages postés
65
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
20 mai 2009

Très bien mais je ne vois toujours pas pour ça  if ((*pSliderCtrl[j]).m_hWnd == pNMHDR->hwndFrom)? Merci.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Bin je ne vois pas comment être plus clair que ce que j'ai déjà écrit... C'est un test d'égalité entre deux hwnd, l'un provenant du tableau que tu as rempli avec les hwnd de tes sliders, l'autre passé en paramètre à ta fonction dans une structure. Si les deux handles sont les mêmes, c'est que tu as trouvé le slider.

Du moins si j'ai bien compris le "A window handle to the control sending the message.".
Messages postés
65
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
20 mai 2009

Ainsi je remplace TTN_NEEDTEXTA par (*pSliderCtrl[j]).m_hWnd ??? Merci.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Non.

Trouver le slider et gérer l'unicode et le mbcs sont deux choses différentes.
Messages postés
65
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
20 mai 2009

OK alors je dois faire :

for (j=0;j<nb_slider;j++)
 {


 RECT rect={20,20,20,20};
 pSliderCtrl[j]=new CSliderCtrl();
 pString[j]=new CString();


 DWORD dwStyle = TBS_NOTICKS | WS_CHILD | WS_VISIBLE | WM_HSCROLL   ;
   


 (*pSliderCtrl[j]).Create(dwStyle|TBS_BOTTOM|TBS_HORZ ,rect, m_parametres,m_OK.GetDlgCtrlID()+(10000+j));


 (*pSliderCtrl[j]).SetWindowPos(&m_OK,120,10+(j*20),175,20,SWP_NOZORDER);
 (*pSliderCtrl[j]).SetRange(0,heure_max-heure_min+60);
 (*pSliderCtrl[j]).SetPos(heure_coupure[j]-heure_min+30); //retrait de chq slider pour les différencier




 if ((*pSliderCtrl[j]).m_Heure = = pWndHeure->hwndFrom);
Messages postés
65
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
20 mai 2009

Non pardon ça if ((*pSliderCtrl[j]).m_hWnd == pNMHDR->hwndFrom)? Merci.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Tu essais de connaître le slider survolé juste après leurs créations ?

Coder de manière aléatoire ne te donnera que des résultats aléatoire. Réfléchis. Imagine ce que tu veux faire globalement, et traduis tout ça en ligne de code.

Coder, ce n'est pas tout à fait faire des copier coller de codes trouvés sur le web et assemblés les uns derrière les autres.
Messages postés
65
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
20 mai 2009

Bonjour, oui une fois le nombre de sliders voulus par l'utilisateur ils sont affichés et seulement après l'utilisateur peut les manipuler.
Messages postés
65
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
20 mai 2009

Déjà pour l'info-bulle pour que mon heure s'affiche, je dois bien modifier cela ? Merci.

CString m_strTipText = _T("anything you like!");
Messages postés
65
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
20 mai 2009

Et c'est après ce code  :
(*pString[j]).Format("%02d:%02d",heure_coupure[j]/60,heure_coupure[j]%60); pWndHeure[j] = new CWnd;
 pWndHeure[j]->Create(_T("STATIC"), *pString[j], WS_CHILD | WS_VISIBLE,
       CRect(300, 10+j*20, 380, 30+j*20), this, 1234);

que je dois mettre : if ((*pSliderCtrl[j]).m_hWnd == pNMHDR->hwndFrom) car c'est après le code précédent que l'on change de slider.Merci.


 
Messages postés
65
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
20 mai 2009

Ne me laissez tomber svp
Messages postés
65
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
20 mai 2009

Il faudrait que j'arrive à faire à peu près cela :

CString m_strTipText ;
m_strTipText((*pSliderCtrl[j]).GetPos());
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Je ne comprend vraiment pas ce qui te bloque...

function OnToolTipNotify(notifyinfo)
  pour i de 0 à nombre_slider faire
    si sliders[i] == notifyinfo->hwndFrom alors
      text_info_bulle = sliders[i].getPos();
      break;
    fsi;
  fait;

  si notifyinfo->ansi alors
    Copy(notifyinfo->szText, text_info_bulle);
  sinon
    MbcsToUnicode(notifyinfo->szText, text_info_bulle);
  fsi;
fin;
Messages postés
65
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
20 mai 2009

Ayé merci j'arrive à faire défiler les heures avec mes curseurs, il me reste l'actualisation des valeurs (cases static) en même temps que le déplacement des curseurs.
Messages postés
65
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
20 mai 2009

Bonjour savez vous comment je peux faire pour avoir mes sliders ou mes curseurs de différentes couleurs les uns par rapport aux autres? Merci.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Fait une recherche, tu n'es pas le premier à te demander ça.(ici,là...)
Messages postés
65
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
20 mai 2009

Merci mais savez-vous pourquoi j'obtiens ce message d'erreur lors de la compilation?Merci
C:\Dlg_Demo_Slider.cpp(398) : error C2511: 'OnCtlColor' : overloaded member function 'struct HBRUSH__ *(class CDC *,class CWnd *,unsigned int)' not found in 'CDlg_Demo_Slider'

Voici le code qui pose problème : HBRUSH CDlg_Demo_Slider::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

if( (nCtlColor CTLCOLOR_STATIC) && (pWnd->GetDlgCtrlID() IDC_MYCOLOREDTEXT) )
{
pDC->SetBkColor( RGB(0xFF,0,0) );
pDC->SetTextColor( RGB(0,0xFF,0) );
}
return hbr;
}
Messages postés
65
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
20 mai 2009

Non excusez-moi c'est bon j'ai trouvé l'erreur!
Messages postés
65
Date d'inscription
jeudi 16 avril 2009
Statut
Membre
Dernière intervention
20 mai 2009

Bonjour je n'arrive pas à utiliser SetColor pour changer la couleur de chaque curseur, lorsque je compile j'ai le message d'erreur suivant, quelqu'un sait-il pourquoi et comment enlever cette erreur?
Merci.
 
C:\Exemple de sliders\SliderMultiple\Dlg_Demo_Slider.cpp(204) : error C2039: 'SetColor' : is not a member of 'CSliderCtrl'
        c:\program files\microsoft visual studio\vc98\mfc\include\afxcmn.h(426) : see declaration of 'CSliderCtrl'