Чтение двойного из диалогового окна редактирования - PullRequest
0 голосов
/ 23 февраля 2012

В настоящее время я работаю над программой (для удовольствия, это не задание), которая имеет несколько функций. Я никогда не использовал Win32 до вчерашнего дня, и поэтому я довольно новый. Я использовал учебники TheForger, чтобы начать. Прямо сейчас у меня есть диалоговая форма с четырьмя полями для редактирования, заряд1, заряд2, заряд3 и расстояние между частицами. Я получаю эту информацию и включаю ее в формулу, чтобы определить величину силы между частицами.

Когда я добираюсь до части, где я получаю данные из поля редактирования, я получаю 0.

Вот мой текущий код:

case ID_SOLVE:
{
    ZeroMemory(coulombDisplay, sizeof(coulombDisplay));

    GetDlgItemText(g_hCoulombs, IDC_DISTANCE, value1, 10);
    coulombsDistance = atof(value1);

    GetDlgItemText(g_hCoulombs, IDC_CHARGE1, value2, 10);
    coulombsStrength1Base = atof(value2);

    GetDlgItemText(g_hCoulombs, IDC_CHARGE2, value3, 10);
    coulombsStrength2Base = atof(value3);

    if(coulombsDistance == 0.0)
    {
        MessageBox(NULL, "WHAT", "WHAT", MB_OK | MB_ICONEXCLAMATION);
        DestroyWindow(g_hCoulombs);
    }

    coulombsResult = (coulombsStrength1Base * coulombsStrength2Base);
    coulombsResult /= (pow(coulombsDistance, 2));
    coulombsResult *= kConstant;

    sprintf(coulombDisplay, "%g", coulombsResult);
    SendDlgItemMessage(g_hCoulombs, IDC_FORCE, WM_SETTEXT, 0, (LPARAM)(LPCSTR)coulombDisplay);
}
break;

value1, value2, value3 и coulombDisplay - все char[], которые были бы обнулены

coulombsResult, coulombsDistance, coulombsStrength1Base, coulombsStrength2Base - все double с

MessageBox с надписью «ЧТО» появляется каждый раз, когда я запускаю программу. Я использую многобайтовый набор символов VC ++ 2010.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 23 февраля 2012

Попробуйте GetDlgItemTextA вместо GetDlgItemText, чтобы убедиться, что вы получаете 8-битные символы, а не 16-битные символы.16-разрядный символ обычно будет иметь ноль в верхней половине и будет интерпретироваться как пустая 8-разрядная строка.

1 голос
/ 23 февраля 2012

STATUS_ACCESS_DENIED имеет хороший момент.Если вы посмотрите документацию для atof , вы увидите, что из-за ошибки будет возвращено 0.0.Я бы порекомендовал записать в файл журнала или что-то еще, чтобы посмотреть, какие данные поступают в функцию atof.Мне интересно, достаточно ли велик ваш выделенный буфер символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...