如何从编辑控件中获取数值

时间:2012-05-07 06:43:00

标签: c++ windows mfc

很抱歉,如果这太简单了,但我无法弄清楚如何将数值输入编辑控件。 MFC编辑由CEdit类表示的控件。

谢谢。

3 个答案:

答案 0 :(得分:19)

除了已经提到的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);

答案 1 :(得分:8)

CEdit派生自CWnd,因此它有一个名为GetWindowText的成员函数,您可以调用它来获取CEdit中的文本,然后将其转换为数字类型int或{{1} } - 取决于您希望用户输入的内容:

double

答案 2 :(得分:2)

如果你经常需要这个功能,比如多个对话框,那么你也可以将自己的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。您可以将其扩展为可自定义的下限和上限以及小数位设置。