CEdit::GetLine() windows 7

CEdit::GetLine() windows 7

本文关键字:windows GetLine CEdit      更新时间:2023-10-16

我有以下代码段,其中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会插入垃圾unicode字符(有时也会插入实际的文本)。你知道这是怎么回事吗?

既然你正在使用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上运行良好)

注意,复制的行不包含null终止字符(请参阅文档中的"备注"部分)。这可以解释你在以后版本的Windows中看到的无意义字符。

不是null终止。您需要这样做:

int count = m_edit.GetLine(0, lpsz, MAX_PATH);
lpsz[count] = 0;