IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

changer de place d'un texte avec WM_TIMER


Sujet :

MFC

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut changer de place d'un texte avec WM_TIMER
    bonjour tout le monde ,
    je veux faire une petite application win32 qui permet d'afficher un txte chaque seconde dans un emplacement different du l'ecran g ecrit le code suivant mais ca marche pas , aucun teste n'est affiché.
    g crée un WM_CREAT dont g ecrit la fonction SetTimer puis un WM_TIMER ou g ecrit ce qui le programme doit faire à chaque seconde
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	int wmId, wmEvent;
       	PAINTSTRUCT ps;
    	HDC hdc;
    	//TCHAR szHello[MAX_LOADSTRING];
    	//LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
    	int x;
    	switch (message) 
    	{
    	case WM_COMMAND:
    	   wmId    = LOWORD(wParam); 
    	   wmEvent = HIWORD(wParam); 
    	   // Parse the menu selections:
    	      switch (wmId)
    	        {
    	           case IDM_ABOUT:
    	         DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
    	            break;
    	         case IDM_EXIT:
    	         DestroyWindow(hWnd);
    	         break;
    	        default:
    	return DefWindowProc(hWnd, message, wParam, lParam);
    	}
    	break;
     
    	case WM_PAINT:
                        RECT rt;
    	    hdc = BeginPaint(hWnd, &ps);
    	   // TODO: Add any drawing code here...
    	   GetClientRect(hWnd, &rt);
    	   EndPaint(hWnd, &ps);
    	   break;
    	case WM_CREATE:
    	   SetTimer(hWnd,1,1000,NULL);
                       break;
    	case WM_TIMER :
    	    x=rand()%4;
                        switch (x)
    	      {
    	        case 0:
    	       DrawText(hdc,"Raiuno",6, &rt, DT_LEFT);
    	       break;
    	       case 1:
    	       DrawText(hdc,"Raiuno",6, &rt, DT_RIGHT);
    	       break;
    	      case 2:
    DrawText(hdc,"Raiuno",6,&rt,DT_SINGLELINE|DT_RIGHT|DT_BOTTOM);
    	       break;
    	     defualt :
    DrawText(hdc,"RaiUno",6, &rt,DT_SINGLELINE|DT_LEFT|DT_BOTTOM);
    			}
    	     break;	
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		break;
    	default:
    	return DefWindowProc(hWnd, message, wParam, lParam);
       }
       return 0;
    }
    j'espere que ce code n'est pa trop long et merci d'avance.


  2. #2
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 887
    Points : 1 531
    Points
    1 531
    Par défaut
    Bon, heu... Hem ! Commençons par le début :

    1) Met des balises <CODE>

    2) Indente ton code

    3) Ta variable rt est une variable locale. Si elle est définie dans le message WM_PAINT, elle aura quand même une valeur aléatoire dans le message WM_TIMER

    4) Le KillTimer, il est où ?

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    merci ,
    quel probleme peut poser la varible rt , moi g vu ça mais g pas trouvé une autre solution surtout je suis debutant (2 app que je fais )
    ou il faut mettre le killtiler?
    merci de nuveau.

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Le KillTimer peut se faire par exemple au moment du message WM_DESTROY

    Ensuite, place plutot la variable x en global ou en static et fait ton switch dans le WM_PAINT pour que le DrawText y soit

  5. #5
    mat.M
    Invité(e)
    Par défaut Re: changer de place d'un texte avec WM_TIMER
    Citation Envoyé par nasrij
    bonjour tout le monde ,
    je veux faire une petite application win32 qui permet d'afficher un txte chaque seconde dans un emplacement different du l'ecran g ecrit le code suivant mais ca marche pas , aucun teste n'est affiché.

    normal que rien ne s'affiche !! Le HDC obtenu n'est valide que dans l'événement WM_PAINT !


    Voilà ce qu'il faut faire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    HDC hdc ; // locale à WndProc 
       case WM_TIMER :
    hdc=GetDC(,hWnd);
    DrawText(hdc,"Raiuno",6, &rt, DT_LEFT); 
    ReleaseDC(hWnd,hdc);
     
    break;


    Sinon une méthode plus conventionnelle et plus logique:

    1 déclarer une fonction AfficherTextes qui reçoit un HDC comme paramêtre.
    Y placer le code de tirage aléatoire des positions de texte.

    2 dans l'événemet WM_TIMER appeler InvalidateRect
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
    void AfficherTextes(HDC hDc)
    {
    x=rand()%4;
                        switch (x)
             {
               case 0:
              DrawText(hdc,"Raiuno",6, &rt, DT_LEFT);
              break;
              case 1:
              DrawText(hdc,"Raiuno",6, &rt, DT_RIGHT);
              break;
             case 2:
    DrawText(hdc,"Raiuno",6,&rt,DT_SINGLELINE|DT_RIGHT|DT_BOTTOM);
              break;
            defualt :
    DrawText(hdc,"RaiUno",6, &rt,DT_SINGLELINE|DT_LEFT|DT_BOTTOM); 
    }
     
    //.............................WndProc
    case WM_TIMER:
              InvalidateRect (hwnd, NULL, TRUE) ;
              return 0 ;
     
         case WM_PAINT:
              hdc = BeginPaint (hwnd, &ps) ;
     
              AfficherTextes(hdc);
              return 0 ;d

  6. #6
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    je vous remerci math.M
    je vais essayer avec ça et j'espere que ça marche,

Discussions similaires

  1. Changer la couleur d'un texte avec le retour d'une valeur de fonction
    Par faplanier dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 05/03/2014, 16h05
  2. Changer la place d'une ligne avec motif
    Par RTK45 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 06/02/2014, 23h15
  3. [AC-2007] Changer un fichier excel en fichier texte avec VBA
    Par fofomama dans le forum VBA Access
    Réponses: 5
    Dernier message: 26/04/2010, 10h57
  4. changer un textarea par fonction JS : texte avec des sauts de ligne
    Par agrotic dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/10/2006, 14h08
  5. Changer la police d'un texte autrement qu'avec style
    Par Death83 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 14/03/2006, 13h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo