【问题标题】:Having trouble concatenating CStrings in an MFC calculator application在 MFC 计算器应用程序中连接 CString 时遇到问题
【发布时间】:2013-01-14 14:48:53
【问题描述】:
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,我不知道为什么。

【问题讨论】:

    标签: c++ mfc concatenation cstring editcontrol


    【解决方案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 documentationEM_GETLINE 不是@ 987654332@-终止复制的行,所以你必须明确指定行长度为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"
    

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 1970-01-01
      • 2019-02-28
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 2022-10-06
      相关资源
      最近更新 更多