c ++ - Læse dobbelt fra dialogredigeringsstyring

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg arbejder i øjeblikket på et program (for sjovt, dette er ikke en opgave), der har flere funktioner. Jeg har aldrig brugt Win32 før i går, og jeg er derfor ny. Jeg brugte TheForger s tutorials til at komme i gang. Lige nu har jeg en dialogformular med fire redigeringsbokse på den, charge1, charge2, charge3 og afstanden mellem partikler. Jeg får disse oplysninger og plugger den ind i formlen for at løse mængden af ​​kraft mellem partiklerne.


Når jeg kommer til den del, hvor jeg får dataene fra redigeringsboksen, modtager jeg 0.


Her er min nuværende kode:


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 og coulombDisplay er alle char[], der har været nul 'd


coulombsResult, coulombsDistance, coulombsStrength1Base, coulombsStrength2Base er alle double s


MessageBox med angivelse af 'HVAD' popper op hver gang jeg kører programmet. Jeg bruger multi-byte tegn sæt VC ++ 2010.


Enhver hjælp ville blive meget værdsat.

Bedste reference


STATUS\_ACCESS\_DENIED har et godt punkt. Hvis du ser på dokumentationen for at du vil se, at en fejltilstand vil resultere i, at 0,0 returneres. Jeg anbefaler at skrive til en logfil eller noget for at se, hvad dataene går ind i atof-funktionen. Jeg undrer mig over, om din tildelte char buffer er stor nok. [14]

Andre referencer 1


Prøv GetDlgItemTextA i stedet for GetDlgItemText for at sikre dig at du får 8-bit tegn tilbage og ikke 16-bit tegn. En 16-bit tegn vil normalt have en nul i den øverste halvdel, og vil være fortolket som en tom 8-bit streng.