cs_ringo44
Messages postés65Date d'inscriptionjeudi 16 avril 2009StatutMembreDernière intervention20 mai 2009
-
20 avril 2009 à 16:52
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 2014
-
4 mai 2009 à 10:36
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.
cs_ringo44
Messages postés65Date d'inscriptionjeudi 16 avril 2009StatutMembreDernière intervention20 mai 2009 27 avril 2009 à 16:15
Je mets mon code car ça sera mieux pour comprendre :
void CDlg_Demo_Slider::OnOK()
{
register int i,j;
CString m_Heure;
for (j=0;j<nb_slider;j++)
{
i=(*pSliderCtrl[j]).GetPos(); //position de chaque curseur en mémoire (i)
m_Heure.Format("%02d:%02d",i/60,i%60);
}
CDialog::OnOK();
}
void CDlg_Demo_Slider::affich_slider()
{
CString strTemp;
int j;
int heure_min, heure_max;
if (!(pSliderCtrl=(CSliderCtrl**)malloc(sizeof(CSliderCtrl*)*nb_slider))) // réservation mémoire
return;
if (!(pWndHeure=(CWnd**)malloc(sizeof(CWnd*)*nb_slider))) // réservation mémoire
return;
if (!(pString=(CString**)malloc(sizeof(CString*)*nb_slider))) // réservation mémoire
return;
if (!(heure_coupure=(int*)malloc(4*nb_slider))) // réservation mémoire
return;
heure_min=1500;heure_max=0;
for (j=0;j<nb_slider;j++)
{
heure_coupure[j]=240+(120*j)/nb_slider;
if (heure_coupure[j]<heure_min)
heure_min=heure_coupure[j];
if (heure_coupure[j]>heure_max)
heure_max=heure_coupure[j];
}
for (j=0;j<nb_slider;j++)
{
RECT rect={20,20,20,20};
pSliderCtrl[j]=new CSliderCtrl();
pString[j]=new CString();
(*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
cs_ringo44
Messages postés65Date d'inscriptionjeudi 16 avril 2009StatutMembreDernière intervention20 mai 2009 28 avril 2009 à 09:55
Bonjour j'ai trouvé un code qui me permettrait de résoudre mon problème mais je n'arrive pas à l'adapter à mon code ci-dessus, pouvez-vous m'aider? Merci.
cs_ringo44
Messages postés65Date d'inscriptionjeudi 16 avril 2009StatutMembreDernière intervention20 mai 2009 28 avril 2009 à 10:15
Non j'obtiens ce message d'erreur :
C:\Exemple de sliders\SliderMultiple\Dlg_Demo_Slider.cpp(221) : error C2511: 'OnToolTipNotify' : overloaded member function 'int (unsigned int,struct tagNMHDR *,long *)' not found in 'CDlg_Demo_Slider'
Vous n’avez pas trouvé la réponse que vous recherchez ?
Elle est appelée en lui passant un paramètre pNMHDR de type NMHDR qui est en fait une NMTTDISPINFOk, mais qui peut aussi être considérée comme une TOOLTIPTEXT.
La structure NMHDR possède un champ hwndFrom de type HWND. "A window handle to the control sending the message."
Je me dis donc que tu peux comparer ce hwndFrom avec le contenu de ton tableau des hwnd de tes sliders.
De cette manière tu sauras quel slider est survolé par la souris.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 28 avril 2009 à 14:44
Bin il semblerait que pour ce coup là, il faille que utilise les deux : que tu fasses comme si tu pouvais recevoir l'un ou l'autre. Dans un cas il faudra que tu renvoie de l'unicode, dans l'autre cas du MBCS.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 28 avril 2009 à 14:56
Mais tu le faisais déjà ça !
Si je commente ton code un peu plus haut...
/* A vu de nez, tu compilais en MBCS */
CString m_strTipText = _T("anything you like!");
/* Si tu dois renvoyer du MBCS */
if (pNMHDR->code == TTN_NEEDTEXTA)
{
/* Une simple copie de chaîne */
lstrcpyn(pTTTA->szText, m_strTipText, sizeof(pTTTA->szText));
pTTTA->hinst = NULL;
}
/* Si tu dois renvoyer du unicode */
else if (pNMHDR->code == TTN_NEEDTEXTW)
{
/* mbstowcsz -> MBCS to wide string, tu convertie m_strTipText en unciode */
_mbstowcsz(pTTTW->szText, m_strTipText, sizeof(pTTTW->szText));
pTTTW->hinst = NULL;
}
cs_ringo44
Messages postés65Date d'inscriptionjeudi 16 avril 2009StatutMembreDernière intervention20 mai 2009 28 avril 2009 à 15:04
D'accord donc ça je n'ai pas besoin de le modifier sauf ça CString m_strTipText = _T("anything you like!"); moi je veux que ça soit l'heure qui s'affiche.Merci.