从对话框编辑控件中读取双精度

时间:2012-02-23 17:32:28

标签: c++ windows winapi

我目前正在开发一个具有多种功能的程序(为了好玩,这不是一项任务)。我昨天之前从未使用过Win32,所以我很新。我使用TheForger的教程开始。现在,我有一个对话框,上面有四个编辑框,charge1,charge2,charge3和粒子之间的距离。我得到这些信息并将其插入公式中以解决粒子之间的力量。

当我到达我从编辑框中获取数据的部分时,我收到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;

value1value2value3coulombDisplay均为char[]已归零

coulombsResultcoulombsDistancecoulombsStrength1BasecoulombsStrength2Base都是double s

每次运行程序时,MessageBox都会弹出“WHAT”。我正在使用VC ++ 2010的多字节字符集。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

STATUS_ACCESS_DENIED有一个好处。如果查看atof的文档,您将看到错误条件将导致返回0.0。我建议写入日志文件或其他东西,以查看数据进入atof函数的内容。我想知道你分配的char缓冲区是否足够大。

答案 1 :(得分:1)

请尝试GetDlgItemTextA而不是GetDlgItemText,以确保您获得的是8位字符,而不是16位字符。一个16位字符在上半部分通常为零,并将被解释为一个空的8位字符串。

相关问题