Récupérer valeur d'un curseur

cs_ringo44 Messages postés 65 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 20 mai 2009 - 22 avril 2009 à 11:16
cs_ringo44 Messages postés 65 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 20 mai 2009 - 27 avril 2009 à 09:46
Bonjour je rencontre une difficulté pour récupérer la valeur d'un curseur qui est un entier et ensuite le convertir en heure et minutes? Merci.

31 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
22 avril 2009 à 13:44
Salut,

MFC ? D'un <strike>curseur</strike> slider ? GetPos ?

Tu peux coder le temps sur 32 bits. Il suffit donc juste que tu ajuste correctement la valeur minimal et maximale de ton slider et tu auras directement une time_t.
0
cs_ringo44 Messages postés 65 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 20 mai 2009
22 avril 2009 à 14:08
Merci mais je n'ai pas compris (je débute) ce qu'il fallait faire, pouvez-vous m'aider svp en fonction de mon code? Merci.

void CDlg_Demo_Slider::OnOK()
{
 // TODO: Add extra validation here
for (int j=0;j<nb_slider;j++)
 {


int i=(*pSliderCtrl[j]).GetPos();  //position de chaque curseur en mémoire (i)
 }


  CDialog::OnOK();
}


void CDlg_Demo_Slider::affich_slider()
{
CString strTemp;
int j;


if (!(pSliderCtrl=(CSliderCtrl**)malloc(sizeof(CSliderCtrl*)*nb_slider)))  //  réservation mémoire   
 return;


for (j=0;j<nb_slider;j++)
 {
 RECT rect={20,20,20,20};
 pSliderCtrl[j]=new CSliderCtrl();
 
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(1,200);
 (*pSliderCtrl[j]).SetPos(j);                              //retrait de chq slider pour les différencier


 }


}
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
22 avril 2009 à 14:13
Bin dans ton SetRange, met des time_t, avec la date mini de ton slider et la date maxi de celui-ci.

Quand tu fera un GetPos, tu aura ainsi directement la time_t choisie par l'utilisateur.

time_test en fait un entier 32 bits qui est le nombre de seconde depuis 1970.
0
cs_ringo44 Messages postés 65 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 20 mai 2009
22 avril 2009 à 14:51
Merci mais comme je n'y arrivais pas j'ai essayé cela. Mais maintenant je voudrais afficher ma conversion(m_Heure) dans ma fenêtre.

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();
}
0

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

Posez votre question
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
22 avril 2009 à 14:54
Fait pas ça manuellement. utilise strftime, comme ici...
0
cs_ringo44 Messages postés 65 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 20 mai 2009
22 avril 2009 à 15:12
Merci mais je n'arrive pas à l'utiliser et comme je débute en visual c++ je suis perdue.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
22 avril 2009 à 16:53
En relisant ta question je me dis que j'avais probablement riencompris -> je croyais que tu voulais une vrai de vrai date, pas juste des heures minutes. Désolé pour le cafouillage. Utiliser "Format" est donc très bien.

Pour afficher l'heure : un tuto sur les MFC.

Si tu veux afficher ton texte dans un CStatic par exemple, il faut que tu utilises sa méthode SetWindowText, héritée de CWnd.

Quelque chose comme ça :
pStatic->SetWindowText(m_Heure);
0
cs_ringo44 Messages postés 65 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 20 mai 2009
23 avril 2009 à 09:53
Bonjour j'ai fais cela mais rien n'apparaît dans la case Static merci :

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);


CString m_Heure;
m_StaticHeure.SetWindowText(m_Heure);


 }


 CDialog::OnOK();
}
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
23 avril 2009 à 10:09
Tu déclares deux fois m_Heure...
La deuxième déclaration est considérée comme locale au for.
Elle est probablement initialisée à "" et prend le pâs sur la variable locale à la méthode.

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);

<strike>CString m_Heure;</strike>
m_StaticHeure.SetWindowText(m_Heure);

 }

 CDialog::OnOK();
}
0
cs_ringo44 Messages postés 65 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 20 mai 2009
23 avril 2009 à 10:25
Ah oui merci mais ça ne fonctionne toujours pas.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
23 avril 2009 à 10:51
C'est à dire ? Rien d'affiché dans le static ?

Et si tu essaie quelque chose de plus simple pour commencer et isoler le problème ?

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);

m_StaticHeure.SetWindowText(_T("Hello world !"));

 }

 CDialog::OnOK();
}
0
cs_ringo44 Messages postés 65 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 20 mai 2009
23 avril 2009 à 11:00
D'accord j'ai fais la même modification mais toujours rien qui s'affiche, merci.
0
cs_ringo44 Messages postés 65 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 20 mai 2009
23 avril 2009 à 13:42
Je dois utiliser un pointeur ?Merci.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
23 avril 2009 à 13:45
Au niveau de m_StaticHeure ? C'est possible. Mais difficile à dire sans voir le reste du code...
0
cs_ringo44 Messages postés 65 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 20 mai 2009
23 avril 2009 à 13:51
Je vous donne le code en entier pour voir où peux se situer mon erreur, merci.

// Dlg_Demo_Slider.cpp : implementation file
//


#include "stdafx.h"
#include "SliderMultiple.h"
#include "Dlg_Demo_Slider.h"


#include "Utilitaire.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


/////////////////////////////////////////////////////////////////////////////
// CDlg_Demo_Slider dialog




CDlg_Demo_Slider::CDlg_Demo_Slider(CWnd* pParent /*=NULL*/)
 : CDialog(CDlg_Demo_Slider::IDD, pParent)
{
 //{{AFX_DATA_INIT(CDlg_Demo_Slider)
 m_SliderValue = _T("");
 m_strHeure = _T("");
 //}}AFX_DATA_INIT
}




void CDlg_Demo_Slider::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CDlg_Demo_Slider)
 DDX_Control(pDX, IDC_STATICHEURE, m_StaticHeure);
 DDX_Control(pDX, IDOK, m_OK);
 DDX_Text(pDX, IDC_STATICHEURE, m_strHeure);
 //}}AFX_DATA_MAP
}




BEGIN_MESSAGE_MAP(CDlg_Demo_Slider, CDialog)
 //{{AFX_MSG_MAP(CDlg_Demo_Slider)
 ON_BN_CLICKED(IDC_BUTTON1, OnMoins)
 ON_BN_CLICKED(IDC_BUTTON2, OnPlus)
 


 //}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CDlg_Demo_Slider message handlers


BOOL CDlg_Demo_Slider::OnInitDialog()
{
CDialog::OnInitDialog();
CString strTemp;


if(nb_slider-7>0)
 largeur_dyna=nb_slider-7;       // Variable permettant de redimensionner la largueur de la plupart des contrôles
else
 largeur_dyna=0;
m_parametres= m_OK.GetParent();




nb_slider=6;


strTemp.Format("%d", nb_slider);
SetDlgItemText(IDC_NBSLIDER,strTemp);


affich_slider();
UpdateData(FALSE);


return TRUE;
}


/***************************************************************************
       Incrémentation
****************************************************************************/


void CDlg_Demo_Slider::OnMoins()
{
libere_slider();
nb_slider--;
if (nb_slider<1) nb_slider=1;


CString strTemp;


strTemp.Format("%d", nb_slider);
SetDlgItemText(IDC_NBSLIDER,strTemp);


affich_slider();
UpdateData(FALSE);
}


/***************************************************************************
       Décrémentation
****************************************************************************/


void CDlg_Demo_Slider::OnPlus()
{
libere_slider();
nb_slider++;
if (nb_slider>15) nb_slider=15;
CString strTemp;


strTemp.Format("%d", nb_slider);
SetDlgItemText(IDC_NBSLIDER,strTemp);


affich_slider();
UpdateData(FALSE);
}




/**************************************************************************
    Création et Initialisation des Sliders
***************************************************************************/


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);


m_StaticHeure.SetWindowText(m_Heure);


}


CDialog::OnOK();
}




void CDlg_Demo_Slider::affich_slider()
{
CString strTemp;
int j;


if (!(pSliderCtrl=(CSliderCtrl**)malloc(sizeof(CSliderCtrl*)*nb_slider)))  // réservation mémoire   
 return;


for (j=0;j<nb_slider;j++)
 {
 RECT rect={20,20,20,20};
 pSliderCtrl[j]=new CSliderCtrl();


 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,1439);
 (*pSliderCtrl[j]).SetPos(j);   //retrait de chq slider pour les différencier
 
 }


}


/********************************************************************************
      Libération mémoire
********************************************************************************/


void CDlg_Demo_Slider::libere_slider()
{
CString strTemp;         //variable locale
int j;


for (j=0;j<nb_slider;j++)
 delete (pSliderCtrl[j]);      //pointeur de fenêtre
free (pSliderCtrl);
}


 




 


 
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
23 avril 2009 à 14:15
Tu as essayé avec SetDlgItemText :
SetDlgItemText(IDC_STATICHEURE,strTemp);

Tu peux aussi essayer de changer le titre de ta dialogbox pour voir :
SetWindowText(m_Heure);
0
cs_ringo44 Messages postés 65 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 20 mai 2009
23 avril 2009 à 14:25
J'ai essayé cela mais rien ne s'affiche dans le static.

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);


//m_StaticHeure.SetWindowText(m_Heure);
 SetDlgItemText(IDC_STATICHEURE,m_Heure);


 }


CDialog::OnOK();
}
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
23 avril 2009 à 14:29
Et le changement de titre ? Il fonctionne au moins ?

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);

//m_StaticHeure.SetWindowText(m_Heure);
// SetDlgItemText(IDC_STATICHEURE,m_Heure);

  SetWindowText(m_Heure);

// Ou encore...

//SetWindowText(_T("toto"));

 }

CDialog::OnOK();
}
0
cs_ringo44 Messages postés 65 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 20 mai 2009
23 avril 2009 à 14:34
Non rien de tout cela fonctionne, avez-vous d'autres suggestions? Merci pour votre aide.
0
cs_ringo44 Messages postés 65 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 20 mai 2009
24 avril 2009 à 09:06
Bonjour je précise juste que pour chaque valeur du curseur correspond un m_Heure différent. Toujours pas de suggestions? Merci.
0
Rejoignez-nous