Witam, tworzę powoli swój pierwszy kalkulator, bazując na różnych poradnikach, wiedzy z innych języków webowych udało mi się dojść do takiego efektu, że kalkulator liczy, lecz mam problem z konwertowanie floata do stringa.
Dokładnie w tych linijkach mam problem z konwertowaniem z float na string, gdyz nie ma takiej funkcji jak ftoa, jak rozwiązać ten problem ? A chcialbym, zeby kalkulator liczyl tez liczby z przecinkiem
if((HWND)lParam == hrowna)
{
if(Znak==1)liczba+=Liczba1;
if(Znak==2)liczba-=Liczba1;
if(Znak==3)liczba/=Liczba1;
if(Znak==4)liczba*=Liczba1;
SetWindowText(hText,"");
char str[10000] = {0};
itoa(liczba, str, 10);
SendMessage(hText, EM_REPLACESEL, 0, reinterpret_cast<LPARAM>(str));
Znak=0;
n=1;
}
if((HWND)lParam == hdziel)
{
// dzielenie
SetWindowText(hText,"");
liczba = Liczba1;
char str[10000] = {0};
itoa(liczba, str, 10);
SendMessage(hText, EM_REPLACESEL, 0, reinterpret_cast<LPARAM>(str));
SetWindowText(hText,"");
n=1;
Znak = 3;
}
if((HWND)lParam == hmno)
{
// *
SetWindowText(hText,"");
liczba = Liczba1;
char str[10000] = {0};
itoa(liczba, str, 10);
SendMessage(hText, EM_REPLACESEL, 0, reinterpret_cast<LPARAM>(str));
SetWindowText(hText,"");
n=1;
Znak = 4;
}
if((HWND)lParam == hodej)
{
// -
SetWindowText(hText,"");
liczba+=Liczba1;
char str[10000] = {0};
itoa(liczba, str, 10);
SendMessage(hText, EM_REPLACESEL, 0, reinterpret_cast<LPARAM>(str));
SetWindowText(hText,"");
n=1;
Znak = 2;
}
Tutaj zamieszczam cały kod programu
#include <windows.h>
#include <iostream>
#include <stdlib.h>
char Znak;
double liczba = 0;
double Liczba1 = 0;
double Liczba2 = 0;
double n = 1;
char buffor[100000];
char *sZnak(char* val)
{
if (n)
{
buffor[0] = 0;
n = 0;
}
if (strlen(buffor) < 100000)
{
strcat(&buffor[0], val);
return buffor;
}
}
LPSTR NazwaKlasy = "randomtxt";
MSG Komunikat;// zmienna do przechowywania komunikatów
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam ); // format w jakim wprowadzane są dane do okienek
HWND hwnd,h1,h2,h3,h4,h5,h6,h7,h8,h9,h0,hdod,hkropka,hrowna,hmno,hodej,hdziel,hclr,hText;
char* aText;
char aZnak;
char aLiczba;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) //odpowiednik main()
{
// WYPE£NIANIE STRUKTURY
WNDCLASSEX wc;
wc.cbSize = sizeof( WNDCLASSEX ); // Rozmiar struktury w bajtach. Nale¿y tu wpisaæ sizeof (WINDOWCLASSEX)
wc.style = 0; //styl klasy
wc.lpfnWndProc = WndProc; // obsluga okienek
wc.cbClsExtra = 0; //bajty dla klasy, najlepiej ustawic 0
wc.cbWndExtra = 0; //bajty dla klasy, najlepiej ustawic 0
wc.hInstance = hInstance; //pierwszy parametr funkcji WinMain
wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); // duza ikonka (alt-tab)
wc.hCursor = LoadCursor( NULL, IDC_ARROW ); //kursor myszki standardowy
wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 ); // kolor t³a
wc.lpszMenuName = NULL; // do menu, póki co jeszcze siê tego nie uczy³em.
wc.lpszClassName = NazwaKlasy; //nazwa klasy
wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); // ma³a ikonka
// REJESTROWANIE KLASY OKNA, wymagane w kazdym programie w winapi
if( !RegisterClassEx( & wc ) )
{
MessageBox( NULL, "x", "x",
MB_ICONEXCLAMATION | MB_OK );
return 1;
}
// TWORZENIE OKNA
hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Kalkulator", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 320, 480, NULL, NULL, hInstance, NULL );
h1 = CreateWindowEx(0, "BUTTON", "1", WS_CHILD | WS_VISIBLE, 0, 80, 40, 40, hwnd, NULL, hInstance, NULL);
h2 = CreateWindowEx(0, "BUTTON", "2", WS_CHILD | WS_VISIBLE, 40, 80, 40, 40, hwnd, NULL , hInstance, NULL);
h3 = CreateWindowEx(0, "BUTTON", "3", WS_CHILD | WS_VISIBLE, 80, 80, 40, 40, hwnd, NULL, hInstance, NULL);
h4 = CreateWindowEx(0, "BUTTON", "4", WS_CHILD | WS_VISIBLE, 0, 120, 40, 40, hwnd, NULL, hInstance, NULL);
h5 = CreateWindowEx(0, "BUTTON", "5", WS_CHILD | WS_VISIBLE, 40, 120, 40, 40, hwnd, NULL, hInstance, NULL);
h6 = CreateWindowEx(0, "BUTTON", "6", WS_CHILD | WS_VISIBLE, 80, 120, 40, 40, hwnd, NULL, hInstance, NULL);
h7 = CreateWindowEx(0, "BUTTON", "7", WS_CHILD | WS_VISIBLE, 0, 160, 40, 40, hwnd, NULL, hInstance, NULL);
h8 = CreateWindowEx(0, "BUTTON", "8", WS_CHILD | WS_VISIBLE, 40, 160, 40, 40, hwnd, NULL, hInstance, NULL);
h9 = CreateWindowEx(0, "BUTTON", "9", WS_CHILD | WS_VISIBLE, 80, 160, 40, 40, hwnd, NULL, hInstance, NULL);
h0 = CreateWindowEx(0, "BUTTON", "0", WS_CHILD | WS_VISIBLE, 0, 200, 80, 40, hwnd,NULL, hInstance, NULL);
hclr = CreateWindowEx(0, "BUTTON", "CLR", WS_CHILD | WS_VISIBLE, 80, 200, 40, 40, hwnd,NULL, hInstance, NULL);
hrowna = CreateWindowEx(0, "BUTTON", "=", WS_CHILD | WS_VISIBLE, 120, 80, 40, 160, hwnd,NULL, hInstance, NULL);
hmno = CreateWindowEx(0, "BUTTON", "*", WS_CHILD | WS_VISIBLE, 80, 40, 40, 40, hwnd,NULL, hInstance, NULL);
hodej = CreateWindowEx(0, "BUTTON", "-", WS_CHILD | WS_VISIBLE, 120, 40, 40, 40, hwnd,NULL, hInstance, NULL);
hdziel = CreateWindowEx(0, "BUTTON", "/", WS_CHILD | WS_VISIBLE, 40, 40, 40, 40, hwnd,NULL, hInstance, NULL);
hdod = CreateWindowEx(0, "BUTTON", "+", WS_CHILD | WS_VISIBLE, 0, 40, 40, 40, hwnd,NULL, hInstance, NULL);
hkropka = CreateWindowEx(0, "BUTTON", ".", WS_CHILD | WS_VISIBLE, 160, 160, 40, 40, hwnd,NULL, hInstance, NULL);
hText = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER,NULL, NULL, 160, 40, hwnd, NULL, hInstance, NULL );
SetWindowText(hText, "");
if( hwnd == NULL )
{
MessageBox( NULL, "blad", "blad", MB_ICONEXCLAMATION );
return 1;
}
ShowWindow( hwnd, nCmdShow ); // Pokazuje okienko...
UpdateWindow( hwnd ); // upewnia sie czy okienko zostało dobrze pokazane
// Pêtla komunikatów
while( GetMessage( & Komunikat, NULL, 0, 0 ) ) // petla wymagana do poprawnej obslugi okienek, odpowiada, za ciagłe wczytywanie danych.
{
TranslateMessage( & Komunikat );
DispatchMessage( & Komunikat );
}
return Komunikat.wParam;
}
// OBS£UGA ZDARZEÑ
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_COMMAND:
if((HWND)lParam == h1)
{
aText="1"; //przypisywanie wartosci zmiennej atext, jako string, dlatego w uszach
SendMessage(hText, EM_REPLACESEL, 0, (LPARAM)aText);// wysylanie wartosci do okienka tekstowego
Liczba1=atof(sZnak("1")); // konwertowanie zmiennej string na zmienna typu float
}
if((HWND)lParam == h2)
{
aText="2"; //przypisywanie wartosci zmiennej atext, jako string, dlatego w uszach
SendMessage(hText, EM_REPLACESEL, 0, (LPARAM)aText);// wysylanie wartosci do okienka tekstowego
Liczba1=atof(sZnak("2")); // konwertowanie zmiennej string na zmienna typu float
}
if((HWND)lParam == h3)
{
aText="3"; //przypisywanie wartosci zmiennej atext, jako string, dlatego w uszach
SendMessage(hText, EM_REPLACESEL, 0, (LPARAM)aText);// wysylanie wartosci do okienka tekstowego
Liczba1=atof(sZnak("3")); // konwertowanie zmiennej string na zmienna typu float
}
if((HWND)lParam == h4)
{
aText="4"; //przypisywanie wartosci zmiennej atext, jako string, dlatego w uszach
SendMessage(hText, EM_REPLACESEL, 0, (LPARAM)aText);// wysylanie wartosci do okienka tekstowego
Liczba1=atof(sZnak("4")); // konwertowanie zmiennej string na zmienna typu float
}
if((HWND)lParam == h5)
{
aText="5"; //przypisywanie wartosci zmiennej atext, jako string, dlatego w uszach
SendMessage(hText, EM_REPLACESEL, 0, (LPARAM)aText);// wysylanie wartosci do okienka tekstowego
Liczba1=atof(sZnak("5")); // konwertowanie zmiennej string na zmienna typu float
}
if((HWND)lParam == h6)
{
aText="6"; //przypisywanie wartosci zmiennej atext, jako string, dlatego w uszach
SendMessage(hText, EM_REPLACESEL, 0, (LPARAM)aText);// wysylanie wartosci do okienka tekstowego
Liczba1=atof(sZnak("6")); // konwertowanie zmiennej string na zmienna typu float
}
if((HWND)lParam == h7)
{
aText="7"; //przypisywanie wartosci zmiennej atext, jako string, dlatego w uszach
SendMessage(hText, EM_REPLACESEL, 0, (LPARAM)aText);// wysylanie wartosci do okienka tekstowego
Liczba1=atof(sZnak("7")); // konwertowanie zmiennej string na zmienna typu float
}
if((HWND)lParam == h8)
{
aText="8"; //przypisywanie wartosci zmiennej atext, jako string, dlatego w uszach
SendMessage(hText, EM_REPLACESEL, 0, (LPARAM)aText);// wysylanie wartosci do okienka tekstowego
Liczba1=atof(sZnak("8")); // konwertowanie zmiennej string na zmienna typu float
}
if((HWND)lParam == h9)
{
aText="9"; //przypisywanie wartosci zmiennej atext, jako string, dlatego w uszach
SendMessage(hText, EM_REPLACESEL, 0, (LPARAM)aText);// wysylanie wartosci do okienka tekstowego
Liczba1=atof(sZnak("9")); // konwertowanie zmiennej string na zmienna typu float
}
if((HWND)lParam == h0)
{
aText="0"; //przypisywanie wartosci zmiennej atext, jako string, dlatego w uszach
SendMessage(hText, EM_REPLACESEL, 0, (LPARAM)aText);// wysylanie wartosci do okienka tekstowego
Liczba1=atof(sZnak("0")); // konwertowanie zmiennej string na zmienna typu float
}
if((HWND)lParam == hdod)
{
// dodawanie
SetWindowText(hText,"");
char str[10000] = {0};//dokladnosc konwersji
liczba+=Liczba1; //operator przypisywania, skrot od liczba = liczba+ liczba1;
itoa(liczba, str, 10); //konwertowanie ciagu znakow, czyli, jesli klikne dwa razy jedynke to jest to 11, a nie 1.
SendMessage(hText, EM_REPLACESEL, 0, reinterpret_cast<LPARAM>(str));
SetWindowText(hText,"");
n=1;
Znak = 1;
}
if((HWND)lParam == hkropka)
{
aText="."; //przypisywanie wartosci zmiennej atext, jako string, dlatego w uszach
SendMessage(hText, EM_REPLACESEL, 0, (LPARAM)aText);// wysylanie wartosci do okienka tekstowego
Liczba1=atof(sZnak(".")); // konwertowanie zmiennej string na zmienna typu float
}
if((HWND)lParam == hrowna)
{
if(Znak==1)liczba+=Liczba1;
if(Znak==2)liczba-=Liczba1;
if(Znak==3)liczba/=Liczba1;
if(Znak==4)liczba*=Liczba1;
SetWindowText(hText,"");
char str[10000] = {0};
itoa(liczba, str, 10);
SendMessage(hText, EM_REPLACESEL, 0, reinterpret_cast<LPARAM>(str));
Znak=0;
n=1;
}
if((HWND)lParam == hdziel)
{
// dzielenie
SetWindowText(hText,"");
liczba = Liczba1;
char str[10000] = {0};
itoa(liczba, str, 10);
SendMessage(hText, EM_REPLACESEL, 0, reinterpret_cast<LPARAM>(str));
SetWindowText(hText,"");
n=1;
Znak = 3;
}
if((HWND)lParam == hmno)
{
// *
SetWindowText(hText,"");
liczba = Liczba1;
char str[10000] = {0};
itoa(liczba, str, 10);
SendMessage(hText, EM_REPLACESEL, 0, reinterpret_cast<LPARAM>(str));
SetWindowText(hText,"");
n=1;
Znak = 4;
}
if((HWND)lParam == hodej)
{
// -
SetWindowText(hText,"");
liczba+=Liczba1;
char str[10000] = {0};
itoa(liczba, str, 10);
SendMessage(hText, EM_REPLACESEL, 0, reinterpret_cast<LPARAM>(str));
SetWindowText(hText,"");
n=1;
Znak = 2;
}
if((HWND)lParam == hclr)
{
SetWindowText(hText, "");
liczba = 0;
n=1;
}
break;
case WM_CLOSE:
DestroyWindow( hwnd );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
break;
default:
return DefWindowProc( hwnd, msg, wParam, lParam );
}
return 0;
}