У меня есть окно редактирования Win32 (т.е. CreateWindow с именем класса "EDIT").
Каждый раз, когда я добавляю строку к элементу управления, я добавляю '\ r \ n' (т.е. новую строку).
Однако, когда я вызываю WM_GETTEXT, чтобы получить текст окна РЕДАКТИРОВАНИЯ, в нем всегда пропускается последний '\ n'.
Если я добавлю 1 к результату WM_GETTEXTLENGTH, он вернёт правильное количество символов, поэтому WM_GETTEXT вернёт окончательный '\ n'.
MSDN говорит об WM_GETTEXTLENGTH:
Когда сообщение WM_GETTEXTLENGTH
отправлено, функция DefWindowProc
возвращает длину в символах
текст. При определенных условиях
функция DefWindowProc возвращает
значение, которое больше, чем фактическое
длина текста. Это происходит с
определенные смеси ANSI и Unicode,
и связано с системой, позволяющей
возможное существование двухбайтовых
набор символов (DBCS) в пределах
текст. Возвращаемое значение, однако,
всегда будет по крайней мере такой же большой, как
фактическая длина текста; вы можете
таким образом, всегда используйте его для направления буфера
распределение. Такое поведение может возникнуть
когда приложение использует оба ANSI
функции и общие диалоги, которые
используйте Unicode.
... но это не объясняет 1 загадку.
Почему это происходит, и для меня безопасно просто добавить необъяснимую 1 к длине текста?
Редактировать
После отключения unicode-компиляции я могу заставить его работать со сборкой ASCII, однако мне бы хотелось, чтобы это работало со сборкой UNICODE, возможно, элемент управления окна EDIT плохо работает с UNICODE?