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

Bibliothèques Discussion :

[WinAPI] Problème avec contrôleur EDIT


Sujet :

Bibliothèques

  1. #1
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : avril 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut [WinAPI] Problème avec contrôleur EDIT
    Bonjour à tous,

    Depuis peu j'ai voulu commencer à apprendre à utiliser la WinAPI. Oui je sais : Pourquoi ? C'est bête il y a des bibliothèques tellement mieux ! Elles rajoutent une couche d'abstraction qui te fait moins galérer... Et j'en passe. Mais moi j'ai envie, alors je me lance

    Pour commencer j'ai voulu faire un simple bloc-note. Quand on ouvre un fichier, ça affiche l'EDIT et c'est censé le remplir.
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    edit = CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0, 0, MAIN_WIN_W, MAIN_WIN_H, win, NULL, instance, NULL);

    Donc pour se faire j'ouvre le fichier avec CreateFile et je récupère un handle sur mon fichier. Jusque là aucun soucis.

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    file = CreateFile(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

    Je lis mon fichier avec la fonction ReadFile. Là encore aucun problème, j'arrive à récupérer la totalité du contenu de mon fichier et à le stocker dans un buffer grâce à une boucle. Je suis passé par les malloc et realloc pour ne pas avoir de contrainte sur sa taille.

    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
    do {
    	if ( (str = realloc(str, i*BUFFERSIZE*sizeof(TCHAR))) == NULL) {
    		stdoutErrorMsg(win);    // Fonction définie dans mon projet
    		exit(-1);
    	}
     
    	if ( ReadFile(file, buf, BUFFERSIZE, &len, NULL) == FALSE ) {
    		stdoutErrorMsg(win);
    		return FALSE;
    	}
     
    	strconcat(str, buf, pos);    // Fonction définie dans mon projet
      	pos += len;
    	i++;
     
    } while( !(len < BUFFERSIZE) );
    str[pos] = '\0';
    Maintenant, il faut que j'affiche le contenu de ce buffer dans le contrôleur. Là j'ai un problème. J'ai voulu passé par les messages et plus particulièrement WM_SETTEXT en envoyant mon buffer comme paramètre. Et ça marche plutôt bien. Mais dès lors que j'ouvre un autre fichier, le comportement de l'EDIT est pour le moins étrange.

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    SendMessage(edit, WM_SETTEXT, 0, (LPARAM)str);

    Il affiche le contenu de ce fichier que je viens d'ouvrir, mais conserve au niveau de son utilisation ma première ouverture. Par exemple, si j'ouvre mon fichier, j'efface tout, et j'en ouvre un autre. Le contenu de mon second fichier s'affiche dans le contrôleur, mais je ne peux rien faire car pour lui j'ai tout est effacé (de mon premier fichier ouvert). Je peux évidemment écrire par dessus, dans quel cas le texte s'efface au fur et à mesure de mon écriture...

    J'ai pas trop de piste sur ce coup là... Quelqu'un pourrait m'aider ? Merci mille fois

  2. #2
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : avril 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Je profite d'un petit up pour porter un éclaircissement. Quand je cherche à récupérer le contenu du buffer ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    handle = (HLOCAL)SendMessage(edit, EM_GETHANDLE, 0, 0);
    str = (PTCHAR)LocalLock(handle);
    printf("buffer : %s\n", str);
    Il est bien "mis à jour". Si j'ouvre un autre fichier, son contenu est bien celui du nouveau fichier. Au début je pensais que genre un buffer gardait en mémoire le contenu de mon premier fichier, et quand j'en ouvrais un nouveau celui-ci ne se mettait pas à jour. Et du coup le programme, lui, traitait avec ce buffer au lieu de traiter le contenu du EDIT.

    Mais apparemment ce n'est pas ça. Alors si quelqu'un a une idée ?

Discussions similaires

  1. Problème avec Mask Edit
    Par Chrysostome dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 14/06/2013, 11h51
  2. problème avec l'edition d'un fichier
    Par Tips dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 10/03/2007, 17h22
  3. Réponses: 2
    Dernier message: 27/02/2007, 09h51
  4. [VB.net express edition] problème avec MSFlexGrid et MSChart
    Par kinganasius dans le forum Windows Forms
    Réponses: 5
    Dernier message: 20/12/2006, 16h12
  5. Réponses: 2
    Dernier message: 02/06/2006, 23h16

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