spin button

spin button - C++ - Programmation

Marsh Posté le 12-11-2005 à 21:02:49    

Salut a tous.
 
Voilà j'ai un petit prob (en fait 2).
 
J'utilise un boutton spin pour incrementer ou diminuer une variable, j'usque la ça marche mais je rencontre 2 problemes :
Le 1er lorsque je clique sur le boutton spin la valeur passe directement à 65535 alors que je l'ai bin initialisé à 1.
Le second je peut incrementer ou decrementer la variable mais si j'increment puis décrement la decrement tation ne se fait pas tout de suite.  
 
Ex si j'ai la valeur 10 et que je l'increment elle passe bien à 11 puis si je clique sur le boutton pour decrementer la valeur augmente (et inversement)  et si clique a nouveau elle diminue comme il faut.
Je suis sous visual C++ 6.0
Désolé de pas etre plus clair pour le 2e pb mais je vois pas trop comment expliquer le pb.  
 
Voila le code

Citation :


void CListeDlg:: OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult) //fonction associé au bouton spin
{
 NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
 
 m_val=1;                       // valeur a afficher dans une edit box
 CSpinButtonCtrl *spin=(CSpinButtonCtrl*) GetDlgItem(IDC_SPIN);  //recuperation de la valeur
 spin->SetRange(1,256);   //defini la plage utilisable
 m_val=spin->GetPos();    
 m_val=m_val-65536;       // pour corriger le probleme n°1 mais bon c'est temporaire
 UpdateData(false);
}


D'avance merci pour vos réponses (et encore désolé si certaines de mes explications sont obscures).  
 
 
 

Reply

Marsh Posté le 12-11-2005 à 21:02:49   

Reply

Marsh Posté le 12-11-2005 à 21:23:25    

65535?
 
Problème de décrémentation d'une valeur non signée?
-1 devient 65535 en non signé.
 
Je chercherai de ce côté là.  :sarcastic:
 
Je me souviens plus très bien (j'utilise très peu le spin button) mais ne faut il pas utiliser la macro DDX_MinMaxInt() sur le champ associé au spin ?
 
Hum encore plus simple : je ne me souviens pas qu'il faille intercepter les événements du contrôle.  :sweat:  
 
Bref fait un tour dans la MSDN parce que là je pense qu'il y a embrouille.


Message édité par slash33 le 12-11-2005 à 21:27:45
Reply

Marsh Posté le 12-11-2005 à 21:39:23    

Pour ce qui de la valeur 65535 j'y ai pensé, mais bon pas vu pourquoi car j'ai bien initialiser ma variable a 1.
 
Pour ce qui est de la macro DDX_MinMaxInt() je la connaissait pas (1er fois que j'utilise le boutton spin) mais merci je vais chercher par la.
 
"je ne me souviens pas qu'il faille intercepter les événements du contrôle."  
Désolé mais je vois pas trop ce que tu veut dire.

Message cité 1 fois
Message édité par tafid le 12-11-2005 à 21:44:41
Reply

Marsh Posté le 13-11-2005 à 18:01:18    

tafid a écrit :

"je ne me souviens pas qu'il faille intercepter les événements du contrôle."  
Désolé mais je vois pas trop ce que tu veut dire.


Ca veut dire que le code suivant est à mon avis parfaitement inutile:

Code :
  1. void CListeDlg:: OnDeltaposSpin1(NMHDR* pNMHDR, LRESULT* pResult) //fonction associé au bouton spin
  2. {
  3. NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
  4. m_val=1;                       // valeur a afficher dans une edit box
  5. CSpinButtonCtrl *spin=(CSpinButtonCtrl*) GetDlgItem(IDC_SPIN);  //recuperation de la valeur
  6. spin->SetRange(1,256);   //defini la plage utilisable
  7. m_val=spin->GetPos();   
  8. m_val=m_val-65536;       // pour corriger le probleme n°1 mais bon c'est temporaire
  9. UpdateData(false);
  10. }


 
Bon regarde la MSDN. J'utilise très peu le spin button.
 
Je te conseille aussi vivement de regarder le système d'échange (DDX - Dialog Data eXchange) et de validation (DDV - Dialog Data Validation) des MFC.

Reply

Marsh Posté le 13-11-2005 à 21:30:41    

Ok merci je vais voir ça.  
Je connaissai pas DDX - Dialog Data eXchange et DDV - Dialog Data Validation ( je commence en c++).


Message édité par tafid le 13-11-2005 à 21:31:34
Reply

Marsh Posté le 10-03-2006 à 16:27:24    

Salut a toi  
 
pour ton probleme de débordement, il faut que tu utilise la syntaxe suivante:
 
m_val= (short) spin->GetPos();    
 
J'ai aussi eu ce pb.
voila

Reply

Marsh Posté le 10-03-2006 à 19:32:35    

Ah bah merci en plus ça tombe pile poile vu que je vais devoir le re utiliser dans un programme merci a toi et puis j'avais laissé ça de coté).
 
ca marche nickel merci.
Par contre j'ai toujours un problème au niveau de l'incrementation qui déconne.
 
On gros ça donne ça  lorsque je clique sur la fleche pour incrementer  0->1->2->3->4-> et la clique sur la flèche pour décrémenter->5->4->3->2......
 


Message édité par tafid le 10-03-2006 à 19:42:22
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed