MFC - 如何在运行时更新编辑框? (C++)

Posted

技术标签:

【中文标题】MFC - 如何在运行时更新编辑框? (C++)【英文标题】:MFC - How to update edit box on runtime? (C++) 【发布时间】:2016-01-15 13:36:10 【问题描述】:

我有一个 MFC 程序(游戏),它在编辑框上向玩家显示分数,我创建了一个变量名 m_score,我想在每次调用特定函数时更新它。所以这很简单,++m_score。但是如何更新编辑框本身? 谢谢!

【问题讨论】:

CEdit::SetWindowText()(继承自CWnd)? 您应该考虑使用静态控件,尤其是在不允许用户更改值的情况下。 帮自己一个忙,获取 Charles Petzold 的 Programming Windows®, Fifth Edition 的副本。在您非常熟悉 Windows API 之前,不要接触 MFC。完成后,如果您决定使用 MFC,请联系 Jeff Prosise'Programming Windows with MFC, Second Edition。跳过任何一个资源都不会让你有任何收获。 @IInspectable 我知道,我希望我有时间。 【参考方案1】:

快速解决方法是拨打SetWindowText即:

CString s;
s.Format(_T("%d"), m_score);
m_Edit.SetWindowText(s);

其他解决方案是DDX,所以在你的 void CGameDlg::DoDataExchange(CDataExchange* pDX) 中,添加:

DDX_Text(pDX, IDC_EDIT1, m_score); // here I assume IDC_EDIT1 is your editbox resorce id

现在,在更改 m_score 调用 UpdateData(FALSE); 以将 m_score 数据放入编辑框后;

【讨论】:

我正在尝试使用 DDX 解决方案。我在哪里调用 UpdateData(false)?我不能在更新 m_score 后立即调用它,因为它在不同的函数上。抱歉,我是 MFC 的新手 @Gil 没办法,你必须在更新 m_score 之后调用它,如果这真的太麻烦了,你可以设置一个计时器,每隔一秒更新一次 score。 其实如果score经常更新的话,即。每 200 毫秒,那么计时器还不错。 我会改写:如何调用 UpdateData(false)?当我在 ++m_score 之后键入它时,程序(显然)冻结了。所以我想我在这里缺少一些语法。 为什么很明显?确保在主线程上调用它并且它应该可以工作。

以上是关于MFC - 如何在运行时更新编辑框? (C++)的主要内容,如果未能解决你的问题,请参考以下文章

mfc c++ 从编辑控件更新文本文件

我自己的 C++ 框架(类似 MFC),我可以创建子窗口,但在 WM_CREATE 时无法创建编辑框

在 MFC 中运行时更改编辑框属性

mfc EDIT编辑框即时在for循环中更新

在 mfc 中单击按钮时更改编辑框内容

MFC编辑框数据实时更新问题!!求解答!!!