begin process at 2010 02 10 09:42:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

euhhh ... :-) desolé, c'est compliqué a expliquer...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

euhhh ... :-) desolé, c'est compliqué a expliquer...

mardi 2 août 2005 à 23:53:21 | euhhh ... :-) desolé, c'est compliqué a expliquer...

BertaNd

salut
c'est assez compliqué a expliquer donc je met une source, ca parle mieux !

(API win32)

tout le tralala de la creation de la fenetre etc...
            TranslateMessage(&msg);
            DispatchMessage(&msg);
// un des deux appelle le module d'en dessous (si j'ai bien compris...)


LRESULT CALLBACK WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
   int i;
      switch (msg)
      {
            case WM_TIMER: // ce n'est pas le message qui est important
                  switch (i)
                  {
                         case 1:
                         // instructions
                         i++;
                         break;
                         case 2:
                         // instructions
                         i++;
                         break;
                         // etc...
                   }
       }
       return 0;
}

voila, mon probleme c'est que ... en fait je n'arrive pas a garder la bonne valeur de i...
a chaque fois que le programme arrive a WinProc, i se reinitialise (normal ! enfin il me semble, vu que c'est une variable d'un module)
il retourne 0, et lorsqu'il revient, i a une valeur differente de celle d'avant...
je sais pas si vous comprenez... (j'explique tres mal je le sais, désolé...)

je voudrais pouvoir garder la valeur de i apres avoir retourné 0 (tout simplement !)

merci et bravo a ceux qui m'ont compris !
mercredi 3 août 2005 à 00:01:55 | Re : euhhh ... :-) desolé, c'est compliqué a expliquer...

Joky

Membre Club
Tu lances ton Timer au moins ??? lol
Balance tout le code si c'est petit parce que c'est vrai que t'explique mal lol :p

void Aurevoir( void ); //Bonne journée

mercredi 3 août 2005 à 00:02:40 | Re : euhhh ... :-) desolé, c'est compliqué a expliquer...

Joky

Membre Club
Ah j'viens de voir que le message n'est pas important :)
Désolé j'lis toujours tout en 2 fois

void Aurevoir( void ); //Bonne journée

mercredi 3 août 2005 à 00:07:38 | Re : euhhh ... :-) desolé, c'est compliqué a expliquer...

BruNews

Administrateur CodeS-SourceS
ben non, i est dans la wndproc donc initialisé "nouveau" à chaque appel de cette wndproc.
Mets i en variable globale, il conservera sa valeur.

ciao...
BruNews, MVP VC++
mercredi 3 août 2005 à 00:09:51 | Re : euhhh ... :-) desolé, c'est compliqué a expliquer...

meech

Membre Club
Réponse acceptée !
Salut,

En effet, pas tout compris...

En fait, il me semble que la fonction WinProc est chargée de traiter les évènements (quand on clique quelque part, qu'on déplace la fenêtre, qu'on appuie sur une touche, etc.).

Si tu souhaites conserver la valeur de i, il faudrait mieux que cette variable soit déclarée de manière globale (en dehors de la fonction) et non localement (dans la fonction).

En fait, essaie de placer ta déclaration int i dans un fichier d'en-têtes (ou au-dessus de toutes tes fonctions), en précisant éventuellement le mot-clef static... L'incrément de ton i devrait alors se réaliser correctement lors de chaque appel d'un évènement Win32.

#include <windows.h>

// déclaration variabale globale i.
int i = 0;

// fonction WinMain...

// fonction WinProc...
LRESULT CALLBACK WinProc(...)
{
// (!) ne pas déclarer de nouveau la variable i
switch(msg)
  {
     case WM_TIMER:
       switch(i)
       {
          case 2:
            i++;
          case 3:
            i++;
          // (...)
       }
  }
}


J'espère avoir compris le but et t'avoir un peu aidé.

NB. Profites-en pour initialiser une bonne fois pour toutes cette variable à zéro (par exemple, au démarrage de l'application).

mercredi 3 août 2005 à 00:09:58 | Re : euhhh ... :-) desolé, c'est compliqué a expliquer...

Joky

Membre Club
et si on fait
static int i;

et une initialisation dans WM_CREATE, ou WM_INITDIALOG ?

void Aurevoir( void ); //Bonne journée

mercredi 3 août 2005 à 00:23:48 | Re : euhhh ... :-) desolé, c'est compliqué a expliquer...

BruNews

Administrateur CodeS-SourceS
vi vi c'est bon Joky ainsi mais ce n'est qu'une variante de syntaxe pour éviter qu'on y retouche ailleurs dans le code (hors de la wndproc) sinon le compilo génèrera le même code que si on met i en var globale.

ciao...
BruNews, MVP VC++
mercredi 3 août 2005 à 01:04:37 | Re : euhhh ... :-) desolé, c'est compliqué a expliquer...

BertaNd

"// déclaration variabale globale i.
int i = 0;"

ok merci !
c'est tout simple !!!
c'est juste parce que je pensais que les variables globales ne pouvait pas etre changées...

j'ai confondu avec les constantes...

enfin bon ! il est quand meme 1h du matin, je suis plus tres frais !
mercredi 3 août 2005 à 09:02:50 | Re : euhhh ... :-) desolé, c'est compliqué a expliquer...

meech

Membre Club
BertaNd,

Ca serait sympa d'accepter ma réponse

Peace.

mercredi 3 août 2005 à 10:03:07 | Re : euhhh ... :-) desolé, c'est compliqué a expliquer...

BruNews

Administrateur CodeS-SourceS
ok meech, je te l'ai validée.

ciao...
BruNews, MVP VC++

1 2

Cette discussion est classée dans : valeur, case, msg, expliquer, compliqué


Répondre à ce message

Sujets en rapport avec ce message

switch case et valeur bouléen [ par hop ] Salut,Je souhaiterai utliser la fonction switch casemais en testant plusieurs valeur bouléen:Du style si j'appel les valeur booleenvaleur1 valeur2 val disparition de valeur !!!!!!!!!!!!!!! [ par toto000 ] Bonjour,Alors voila j'ai une fonction menufonc (menu de la souris) avec en case 1: taille de l'image (du fichier que comporte la variable fichier_imag Juste expliquer...? [ par Zekez ] Bonjour,Voici une structure que j'ai dans une application mais que je ne comprend pas trop: template struct noeud{  type valeur;  noeud* suiv;  noeud( conversion string (binaire) to string (hexa) [ par janiaut ] Bonjour, voila je susi toujours dans mon big programme, j'ai un petit problème sur une conversion d'un string (de mot binaire) en conversion de string faire progresser....une progress bar !! [ par Xs ] c tout bete, mais je sais pas comment faire. ou plutot lui dire a quoi comparer sa progression par rapport au chargement de quelque chose.mon code : # objet non initialisé (API Win32) [ par Xs ] salut !voici mon code, d'abord :#include #include #include "resource.h"LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam){cha positions [ par Xs ] salut ! je cherche et je trouve pas, ou alors je sais pas m'en servir, comment on recupere la position actuelle du fenetre(dialogbox).j'ai essayé des touches [ par Xs ] voila, j'ai essayé de tester des touches afin que, par exemple, lorsque l'on appuie sur Y, une message box apparaisse.j'ai recupérer ce code venat de erreur memoire [ par Xs ] alors voila, j'ai jamais vu ca.je lance mon programme. normal. puis je clique sur le bouton generer et là, pouf !un message d'erreur. alors, celui la, pu#!@'{&=!:; de memoire !!! [ par Xs ] salut.voila, presque chacun de mes prog, j'obtiens une erreur memoire du type "l'adresse "0x0001834F" ne peut etre "read"/"written"........."c 'est t


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,092 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales