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