对不起,如果这太微不足道了,但我不知道如何获得数值input到编辑控制。 MFC编辑由CEdit类表示的控件。
谢谢。
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
除了已经提到的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。 您可以将其扩展为具有可自定义的上限和下限位置设置。