Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2707 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  spin button

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

spin button

n°1244428
tafid
Posté le 12-11-2005 à 21:02:49  profilanswer
 

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

mood
Publicité
Posté le 12-11-2005 à 21:02:49  profilanswer
 

n°1244445
slash33
Posté le 12-11-2005 à 21:23:25  profilanswer
 

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
n°1244462
tafid
Posté le 12-11-2005 à 21:39:23  profilanswer
 

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
n°1244728
slash33
Posté le 13-11-2005 à 18:01:18  profilanswer
 

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.

n°1244837
tafid
Posté le 13-11-2005 à 21:30:41  profilanswer
 

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
n°1322895
lucpolak
Posté le 10-03-2006 à 16:27:24  profilanswer
 

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

n°1323050
tafid
Posté le 10-03-2006 à 19:32:35  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  spin button

 

Sujets relatifs
recuperation de la valeur d'un radio buttonun petit coup de main pour créer un Button
Style sur un Button l'aligne en bas ? [résolu]input type="button"... Ne transmet pas sa value ?
Lien interne avec un Button sur un WebBrowserappliquer un syle different a un champ texte et a un radio button ?
picture sur buttonexiste t'il des command button du style windows xp ?
recharger une image générée avec GD sur l'appui d'un button[HTML] Tailler un bouton de type button ou submit ?
Plus de sujets relatifs à : spin button


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR