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,我无法找出原因。
答案 0 :(得分:1)
我认为您的代码中的问题是您尝试在调用_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()
抓取第一行(最顶部),你可以使用这样的代码(请注意according to MSDN documentation,{{1不EM_GETLINE
- 终止复制的行,因此您必须明确指定行长度为NUL
):
ReleaseBuffer()