我认为您的代码中的问题是您在调用之后但在调用之前尝试修改字符串(连接_T("1")
)。此外,你有不平衡的/电话。GetBuffer()
ReleaseBuffer()
GetBuffer()
ReleaseBuffer()
假设这m_display
是一个CEdit
实例,您可以尝试这样的代码(对我有用):
void CcalculatorDlg::OnBnClickedButton1()
{
// Get current text from edit control
// (assume a single-line edit control)
CString grabData;
m_display.GetWindowText(grabData);
// Concatenate "1"
grabData += L'1';
// Update edit control text
m_display.SetWindowText(grabData);
}
如果您有一个多行编辑控件并且您想使用 获取第一(最上面的)行CEdit::GetLine()
,您可以使用这样的代码(请注意,根据 MSDN 文档,EM_GETLINE
不会-NUL
终止复制的行,所以您有将行长显式指定为ReleaseBuffer()
):
//
// Read first line from edit control
//
CString grabData;
static const int kMaxBufferLength = 80;
wchar_t* buffer = grabData.GetBuffer(kMaxBufferLength + 1);
// Note '+ 1' for NUL string terminator (it seems that EM_GETLINE, which is
// wrapped by CEdit::GetLine(), doesn't NUL-terminate the returned string).
const int grabDataLength = m_display.GetLine(0, buffer, kMaxBufferLength);
grabData.ReleaseBuffer(grabDataLength);
// *After* calling ReleaseBuffer(), you can modify the string, e.g.:
grabData += L'1'; // concatenate "1"