无法在MFC计算器应用程序中连接CStrings

时间:2013-01-14 14:48:54

标签: c++ mfc concatenation cstring editcontrol

void CcalculatorDlg::OnBnClickedButton1()
{
    CString grabData = _T("");
    m_display.GetLine(0,grabData.GetBuffer(10),10);
    grabData += _T("1");
    m_display.SetWindowTextW(grabData.GetBuffer());
    grabData.ReleaseBuffer();

}

我正在尝试使用MFC制作一个基本的计算器应用程序,我在数字输入方面遇到了一些麻烦。

以上是" 1"按下按钮。我想让它阅读显示控件中已经显示的内容,然后像真正的计算器那样在它的末尾添加1。但是,我无法让它发挥作用。

基本上第一个按钮按下它可以工作,并将空白显示(编辑控制)更改为1.然后连续按下不会继续添加1,我无法找出原因。

1 个答案:

答案 0 :(得分:1)

我认为您的代码中的问题是您尝试在调用_T("1")之后修改字符串(连接GetBuffer(),但在调用之前 ReleaseBuffer()。此外,您有GetBuffer() / ReleaseBuffer()次呼叫失衡。

假设m_displayCEdit个实例,您可以尝试这样的代码(为我工作):

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()抓取第一行(最顶部),你可以使用这样的代码(请注意according to MSDN documentation,{{1不EM_GETLINE - 终止复制的行,因此您必须明确指定行长度为NUL):

ReleaseBuffer()