抱歉,如果这太琐碎了,但我不知道如何将数值输入到编辑控件中。CEdit类表示的 MFC 编辑控件。
谢谢你。
除了已经提到的 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 派生自 CWnd,因此它有一个名为的成员函数GetWindowText
,您可以调用该函数来获取 CEdit 中的文本,然后将其转换为数字类型,int
或者double
- 取决于您希望用户输入的内容:
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
如果您将定期需要该功能,例如在多个对话框中,那么您也可以继承您自己的 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。您可以将其扩展为具有可自定义的下限和上限以及小数位设置。