Преобразование строки в целое число в MFC

Я только новичок в платформе MFC. Я просто пробую простой МПГ. Получение 2 чисел в 2 окнах редактирования и отображение суммы в третьем поле редактирования при нажатии кнопки.

Это мой код:

void CMineDlg::OnEnChangeNumber1()
{
   CString strNum1,strNum2;
   m_Number1.GetWindowText(strNum1,10);   //m_NUmber1 is variable to 1st edit box.
   m_Number2.GetWindowText(strNum2,10);   //m_Number2 is variable to 2nd edit box.
} 

void CMineDlg::OnBnClickedSum()
{
   m_Result=m_Number1+m_Number2;
}

Я знаю, что мне нужно преобразовать строки в целые числа. Но я не знаю, как это сделать. Пожалуйста, помогите.


person BeginnerWin32    schedule 01.04.2015    source источник
comment
Если есть какая-то тема, связанная с этим, пожалуйста, напишите ей. Я не нашел. Пожалуйста, помогите.   -  person BeginnerWin32    schedule 01.04.2015


Ответы (3)


Вы можете использовать Class Wizard для добавления переменных целочисленного типа и связывания их с полями редактирования. Затем в обработчике событий OnEnChangeNumber1 (или в OnBnClickedSum) вы просто вызываете UpdateData(TRUE);, который заставляет эти переменные обновлять свои значения. После этого вы можете суммировать эти целочисленные переменные.

person Dmitry Arestov    schedule 01.04.2015
comment
Спасибо за ответ. Я создал целочисленные переменные для полей редактирования и связал их с полями редактирования. В обработчике событий кнопки я добавил два числа. В этом нет никакой ошибки. Но когда он выполняется, в первом поле редактирования отображается 0, во втором - -858993460, а в поле редактирования результатов отображается -858993460 даже без нажатия кнопки. Я хочу, чтобы пользователь вводил данные с помощью GetWindowText. Таким образом, ввод будет строковым. Также просьба помочь в преобразовании строки в целое число. - person BeginnerWin32; 01.04.2015
comment
Что касается странных отрицательных значений, вам следует инициализировать целочисленные переменные перед отображением диалогового окна. Вы можете сделать это в конструкторе или в методе OnInitDialog. Опять же, вам не нужно преобразовывать строки в целые числа и наоборот. MFC сделает это за вас. Когда вы вызываете UpdateData(TRUE), MFC внутренне принимает строковые значения из текстовых полей через GetWindowsText и преобразует их в соответствующие типы ваших связанных переменных. Когда вы вызываете UpdateData(FALSE), MFC преобразует связанные переменные в строки и заполняет текстовые поля. - person Dmitry Arestov; 01.04.2015
comment
Конечно. Если m_Result связан с текстовым полем, вы должны вызвать UpdateData(FALSE), чтобы передать результат в текстовое поле. - person Dmitry Arestov; 01.04.2015

Использовать

CString strNum = _T("11");  //CString variable
int num;                //Integer Variable
_stscanf(strNum, _T("%d"), &num);   //Conversion

Or

num = atoi((char*)(LPCTSTR)strNum);  
person Himanshu    schedule 01.04.2015
comment
Это несовместимо с UNICODE - person Andrew Komiagin; 01.04.2015

Правильный UNICODE-совместимый способ сделать это:

CString str = _T("10");
int nVal = _ttoi(str);
__int64 = _ttoi64(str);
person Andrew Komiagin    schedule 01.04.2015