CEdit :: GetLine () windows 7 - PullRequest
       9

CEdit :: GetLine () windows 7

3 голосов
/ 12 апреля 2011

У меня есть следующий сегмент кода, где m_edit - это элемент управления CEdit:

TCHAR lpsz[MAX_PATH+1];

// get the edit box text
m_edit.GetLine(0,lpsz, MAX_PATH); 

Это прекрасно работает на компьютерах под управлением Windows XP и более ранних версий.Я не проверял это в Vista, но в Windows 7 lpsz вставляет в него ненужные юникод-символы (а иногда и сам текст).Есть идеи о том, что здесь происходит?

Ответы [ 2 ]

4 голосов
/ 19 мая 2011

Это не нулевое окончание.Вам нужно сделать это:

int count = m_edit.GetLine(0, lpsz, MAX_PATH);
lpsz[count] = 0;
3 голосов
/ 12 апреля 2011

Поскольку вы используете MFC, почему вы не используете его класс CString?Это одна из причин, по которой многие программисты были привлечены к MFC, потому что это значительно облегчает работу со строками.

Например, вы можете просто написать:

int len = m_edit.LineLength(m_edit.LineIndex(0));
CString path;
LPTSTR p = path.GetBuffer(len);
m_edit.GetLine(0, p, len);
path.ReleaseBuffer();

(код вышепроверено на работоспособность в Windows 7.)

Обратите внимание, что скопированная строка не содержит символа нулевого завершения (см. раздел «Замечания» в документации ).Это может объяснить бессмысленные символы, которые вы видите в более поздних версиях Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...