Bonjour,

J'essaye de lire ligne par ligne le contenu d'un edit control, la longueur de la ligne retourne toujours 0.

les trois code suivants ne fonctionne pas, je ne voit pas ou est l'erreur;

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
 
int nbLig = ::SendMessage(GetDlgItem(_hSelf, IDC_EDIT_FILTER), EM_GETLINECOUNT, 0, 0);
	for (int lineIndex = 0; lineIndex < nbLig; lineIndex++)
	{
		int characterIndex = ::SendMessage(_hSelf, EM_LINEINDEX, (WPARAM)lineIndex, (LPARAM)0);
		int lineLength = ::SendMessage(_hSelf, EM_LINELENGTH, (WPARAM)lineIndex, (LPARAM)0);
 
		if (lineLength > 0)
		{
			TCHAR* pBuffer = new TCHAR[lineLength + 1];
 
			if (pBuffer)
			{
				// Set the size of the buffer
				*(WORD*)pBuffer = lineLength + 1;
 
				// Retrieve the line
				int characterCount = ::SendMessage(_hSelf, EM_GETLINE, (WPARAM)lineIndex, (LPARAM)pBuffer);
				// NUL-terminate buffer
				pBuffer[characterCount] = TEXT('\0');
				DebugMsg(TEXT("lineindex: %d characther index: %d linelength: %d buffer: %s\n"), lineIndex, characterIndex, lineLength, pBuffer);
				delete[] pBuffer;
			}
		}
	}
 
	for (int i = 0; i < nbLig; i++)
	{
		int characterIndex = SendMessage(_hSelf, EM_LINEINDEX, i, 0);
		int length = SendMessage(_hSelf, EM_LINELENGTH, characterIndex, 0);
 
		if (length > 0)
		{
			TCHAR* buffer = new TCHAR[length + 1];
			if (buffer)
			{
				buffer[length] = '\0';
				buffer[0] = length;
 
				SendMessage(_hSelf, EM_GETLINE, (WPARAM)i, (LPARAM)buffer);
				DebugMsg(TEXT("i: %d length: %d buffer: %s\n"), i, length, buffer);
				delete[] buffer;
			}
		}
	}
 
	for (int i = 0; i < nbLig; i++)
	{
		int length = SendMessage(_hSelf, EM_LINELENGTH, (WPARAM)i, 0);
		TCHAR* buffer = new TCHAR[length + 1];
		buffer[0] = length + 1;
		buffer[length] = '\0';
		SendMessage(_hSelf, EM_GETLINE, (WPARAM)i, (LPARAM)buffer);	
 
		DebugMsg(TEXT("i: %d buffer: %s\n"), i, buffer);				
		delete[] buffer;
	}
Je sous sous windows x64 en UNICODE (vs 2013);

Merci de votre aide.