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