如何从编辑控件获取数值

对不起,如果这太微不足道了,但我不知道如何获得数值input到编辑控制。 MFC编辑由CEdit类表示的控件。

谢谢。

CEdit来自CWnd,所以它有一个名为GetWindowText的成员函数,您可以调用它来获取CEdit中的文本,然后将其转换为数字类型( intdouble ,具体取决于您希望用户输入的内容:

 CString text; editControl.GetWindowText(text); //here text should contain the numeric value //all you need to do is to convert it into int/double/whatever 

除了已经提到的GetWindowText方法之外,您还可以通过DDX将其绑定到整数/无符号整数/双精度/浮点值。 尝试这个:

 void CYourAwesomeDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT_NUMBER, m_iNumber); } 

而m_iNumber是您的CYourAwesomeDialog类的成员。

你必须打电话

 UpdateData(TRUE); 

以便将控件中的值写入变量。 呼叫

 UpdateData(FALSE); 

反过来做 – 从控制变量。

编辑(奖金):

在重新阅读我的答案时,我注意到UpdateData(…)需要一个BOOL变量 – 更正。 所以我有一个喜欢可读性的人的想法。 因为我总是搞不清楚哪个方向调用了哪个方向,你可以引入一个枚举来使它更具可读性,就像这样(也许在stdafx.h或者一些中心头文件中):

 enum UpdateDataDirection { FromVariablesToControls = FALSE, FromControlsToVariables = TRUE } 

你只需要写:

 UpdateData(FromVariablesToControls); 

要么

 UpdateData(FromControlsToVariables); 

如果你经常需要这个功能,在多个对话框中说,那么你也可以继承你自己的CEdit派生类来完成获取,设置和验证工作。

 class CFloatEdit : public CEdit { public: CFloatEdit(); void SetValue(double v) { // format v into a string and pass to SetWindowText } double GetValue() { // validate and then return atoi of GetWindowText } void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { // only allow digits, period and backspace } }; 

就像这样,确保消息映射将所有其他消息传递给父CEdit。 您可以将其扩展为具有可自定义的上限和下限位置设置。