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

Autres éditeurs Discussion :

[API Windows] Mettre une fenêtre à jour


Sujet :

Autres éditeurs

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 134
    Points : 66
    Points
    66
    Par défaut [API Windows] Mettre une fenêtre à jour
    Bonjour,

    Je doit afficher un text illico à l'écran ,donc je doit le mettre à jour lorsque la fenêtre est redesinnée. J'ai fait ça comme ça mais apparament ce n'est pas bon :

    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
     
     case WM_PAINT:
     
               {
                    auto HDC hdc;                       // ' Device Context ' vers la fenêtre
                    auto char * infos = new char[100];  // Buffer de données à écrire sur la fenêtre
     
                   // ** On va afficher le texte suivant à l'écran **
                   infos = "Entrez le chemin d'acces d'un dossier : ";
                  // On récupère le ' device context '
                   hdc = GetDC(hwnd);
                   // Le font est transparent (sans cette ligne il aurait été blanc par défaut)
                   SetBkMode(hdc,TRANSPARENT);
                   // On affiche le texte à la position (x = 10 ,y = 10)
                    TextOut(hdc,10,10,infos,strlen(infos));
                    delete infos;
                    infos = 0;
     
                           break;
               }
    Le code est OK ,mais j'ai dut oublier qqe chose pour mettre correctement le fenêtre à jour je crois ,car tous les contrôles disparaissent subitement ...

    Merci

    Zazeglu

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il faut pas un ReleaseDC apres un GetDC ?

    Sinon, tu sais que tu peux declarer des tableaux de caracteres statiques, ça marche tout aussi bien si ce n'est mieux (t'as encore une fuite mémoire héhé).

    D'ailleurs ça m'étonne que ça plante pas méchamment .

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 134
    Points : 66
    Points
    66
    Par défaut
    Ah ,eh bien j'ai modifé donc ,j'ai rajouté un ReleaseDC :

    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
     
     case WM_PAINT: 
     
               { 
                    auto HDC hdc;                       // ' Device Context ' vers la fenêtre 
                    auto char * infos = new char[100];  // Buffer de données à écrire sur la fenêtre 
     
                    // ** On va afficher le texte suivant à l'écran **
                   infos = "Entrez le chemin d'acces d'un dossier : "; 
                    // On récupère le ' device context '
                    hdc = GetDC(hwnd);
                    // Le font est transparent (sans cette ligne il aurait été blanc par défaut)
                    SetBkMode(hdc,TRANSPARENT);
                    // On affiche le texte à la position (x = 10 ,y = 10)
                    TextOut(hdc,10,10,infos,strlen(infos)); 
     
     
                    ReleaseDC(hwnd,hdc);
                    delete infos; 
                    infos = 0; 
     
                    break;
               }
    Mais le résultat est le même
    Et ou y a t'il une fuite de mémoire ?J'ai bien supprimer le pointeur non ?

    Merci

    Zazeglu

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Au debut infos pointe sur une chaine de caractere que tu alloues en memoire. Juste apres tu fais pointer infos sur une chaine constante qui peut tres bien se trouver dans une zone mémoire qui est en lecture seule. Donc un delete la-dessus c'est pas génial... De plus les 100 char alloués au début sont perdus.

    Pour la copie de chaine : strcpy, et non pas "="
    A noter qu'ici tu peux tres bien faire simplement const char* infos = "blabla", sans rien allouer ni liberer. Et aussi on n'utilise plus auto depuis belle lurette .

    Tu penses savoir manipuler les pointeurs mais je pense qu'il faudrait que tu relises ce chapitre un ptit coup

    Sinon pour ton problème je peux pas t'aider désolé

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 134
    Points : 66
    Points
    66
    Par défaut
    Tu penses savoir manipuler les pointeurs mais je pense qu'il faudrait que tu relises ce chapitre un ptit coup
    Je crois bien tout compte fait que je ne les maitrise pas encore

    Mais pq n'utlise t'on plus auto ?C'est néfaste ou simplement c'est sortis des habitudes ?

    Merci

    Zazeglu

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Etant un vieux truc (le mot-clé auto, pas moi ) j'en n'ai pas beaucoup entendu parler. Ce n'est pas néfaste, mais il me semble que maintenant c'est le compilateur qui gère ce genre de choses.

    (après quelques recherche) En fait c'est le comportement par défaut pour la portée des variables. Donc ça ne sert à rien de le mettre...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 134
    Points : 66
    Points
    66
    Par défaut
    ah oui je savait,mais moi je les mets juste pour faire joli dans le code

    Zazeglu

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 134
    Points : 66
    Points
    66
    Par défaut
    J'ai trouvé ce qui clochait ; j'avait oublié de mettre ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                    hdc=BeginPaint(hwnd,&paintst);
                    EndPaint(hwnd,&paintst);
                    ReleaseDC(hwnd,hdc);
    Pour lui dire de bien redessiner le reste de l'interface

    Merci

    Zazeglu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/06/2012, 09h36
  2. APi pour mettre une fenêtre sous les icones du bureau.
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 28
    Dernier message: 20/03/2007, 13h14
  3. Comment mettre une fenêtre au premier plan?
    Par damien99 dans le forum MFC
    Réponses: 11
    Dernier message: 30/08/2006, 11h37
  4. [api windows]envoyer une BMP par une socket
    Par hansaplast dans le forum Windows
    Réponses: 12
    Dernier message: 31/01/2006, 13h43
  5. [MFC] mettre une fenêtre en 1er plan
    Par bigboomshakala dans le forum MFC
    Réponses: 4
    Dernier message: 14/05/2004, 16h39

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