我目前正在开发一个具有多种功能的程序(为了好玩,这不是一项任务)。我昨天之前从未使用过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;
value1
,value2
,value3
和coulombDisplay
均为char[]
已归零
coulombsResult
,coulombsDistance
,coulombsStrength1Base
,coulombsStrength2Base
都是double
s
每次运行程序时,MessageBox都会弹出“WHAT”。我正在使用VC ++ 2010的多字节字符集。
非常感谢任何帮助。
答案 0 :(得分:1)
STATUS_ACCESS_DENIED有一个好处。如果查看atof的文档,您将看到错误条件将导致返回0.0。我建议写入日志文件或其他东西,以查看数据进入atof函数的内容。我想知道你分配的char缓冲区是否足够大。
答案 1 :(得分:1)
请尝试GetDlgItemTextA
而不是GetDlgItemText
,以确保您获得的是8位字符,而不是16位字符。一个16位字符在上半部分通常为零,并将被解释为一个空的8位字符串。