#include <windows.h>
#ifdef __BORLANDC__
  #pragma argsused
#endif
extern HINSTANCE _hInstance;
 static const char tytul[] = "Kalkulator";
 int i; // zmienna okreslajaca czy trzeba odswierzyc okno wyniku
 int max_znak=10; //dopuszcalna ilosc liczb w oknie danych
 LPTSTR liczba;  // 1 wprowadzona liczba zamieniona na tekst
 LPTSTR liczba1; // 3 wprowadzona liczba zamieniona na tekst
 LPTSTR liczba2; // wynik zamieniony na tekst
 float wynik; // wynik w posatci cyfrowej
 LRESULT CALLBACK GlownaFunkcja(HWND hwnd, UINT msge, WPARAM wParam, LPARAM lParam)
   {
   switch (msge)
     {
     case WM_PAINT :
       {
        // wypisanie wyniku
       PAINTSTRUCT ps;
       BeginPaint(hwnd, &ps);
      if (i==1) {
        liczba2="                              ";
        gcvt(wynik,8,liczba2);
        SetDlgItemText(hwnd,7,liczba2);i=0;}
       EndPaint(hwnd, &ps);
       return 0;
       }
     case WM_CLOSE : { DestroyWindow(hwnd); break; }
     case WM_DESTROY : { PostQuitMessage(0); return 0; }
     case WM_COMMAND : {
     // wcisniety guzik +
     if (LOWORD(wParam)==1)  {
       liczba="                              ";
       liczba1="                              ";
       GetDlgItemText(hwnd,5,liczba,max_znak);
       GetDlgItemText(hwnd,6,liczba1,max_znak);
       wynik = (float)strtod(liczba,NULL)+(float)strtod(liczba1,NULL);
       i=1;
     }
     // wcisniety guzik -
     if (LOWORD(wParam)==2)  {
      liczba="                              ";
      liczba1="                              ";
      GetDlgItemText(hwnd,5,liczba,max_znak);
      GetDlgItemText(hwnd,6,liczba1,max_znak);
      wynik = (float)strtod(liczba,NULL)-(float)strtod(liczba1,NULL);
      i=1;
    }
    // wcisniety guzik *
    if (LOWORD(wParam)==3)  {
      liczba="                              ";
      liczba1="                              ";
      GetDlgItemText(hwnd,5,liczba,max_znak);
      GetDlgItemText(hwnd,6,liczba1,max_znak);
      wynik = (float)strtod(liczba,NULL)*(float)strtod(liczba1,NULL);
      i=1;
    }
    // wcisniety guzik /
    if (LOWORD(wParam)==4)  {
      liczba="                              ";
      liczba1="                              ";
      GetDlgItemText(hwnd,5,liczba,max_znak);
      GetDlgItemText(hwnd,6,liczba1,max_znak);
      wynik = (float)strtod(liczba,NULL)/(float)strtod(liczba1,NULL);
      i=1;
    }
    if (LOWORD(wParam)==10)  {
      SendMessage(hwnd,WM_DESTROY,0,0);
      return 0;
    }

      InvalidateRect(hwnd,NULL,TRUE);
       UpdateWindow(hwnd);
       return 0;
     }
     }
   return DefWindowProc(hwnd, msge, wParam, lParam);
   }
int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
  MSG msg;
HWND main_hwnd;
WNDCLASS glowne_okno;
 glowne_okno.style = CS_HREDRAW | CS_VREDRAW;
 glowne_okno.lpfnWndProc = GlownaFunkcja;
 glowne_okno.cbClsExtra = glowne_okno.cbWndExtra = 0;
 glowne_okno.hInstance = _hInstance;
 glowne_okno.hIcon = LoadIcon(NULL, IDI_APPLICATION);
 glowne_okno.hCursor = LoadCursor(NULL, IDC_ARROW);
 glowne_okno.hbrBackground = (HBRUSH)COLOR_WINDOW;
 glowne_okno.lpszMenuName = NULL;
 glowne_okno.lpszClassName = tytul;
 if (RegisterClass(&glowne_okno))
   {
   main_hwnd = CreateWindow(tytul, tytul,
                WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
                CW_USEDEFAULT, CW_USEDEFAULT,
                200, 250,
                HWND_DESKTOP, NULL, _hInstance, NULL);
   }
 else
   main_hwnd = NULL;

// guziki kalkulatora
CreateWindow("button", "+", WS_CHILD | WS_VISIBLE,
10,10,30,30, main_hwnd, (HMENU)1, hInstance, NULL);
CreateWindow("button", "-", WS_CHILD | WS_VISIBLE,
10,50,30,30, main_hwnd, (HMENU)2, hInstance, NULL);
CreateWindow("button", "*", WS_CHILD | WS_VISIBLE,
10,90,30,30, main_hwnd, (HMENU)3, hInstance, NULL);
CreateWindow("button", "/", WS_CHILD | WS_VISIBLE,
10,130,30,30, main_hwnd, (HMENU)4, hInstance, NULL);
CreateWindow("button", "Koniec", WS_CHILD | WS_VISIBLE,
10,190,60,30, main_hwnd, (HMENU)10, hInstance, NULL);

//okna z liczbami
CreateWindowEx(WS_EX_CLIENTEDGE	,"edit", "5", WS_CHILD | WS_VISIBLE,
80,10,80,20, main_hwnd, (HMENU)5, hInstance, NULL);
CreateWindowEx(WS_EX_CLIENTEDGE	,"edit", "5", WS_CHILD | WS_VISIBLE,
80,50,80,20, main_hwnd, (HMENU)6, hInstance, NULL);
CreateWindow("edit", "0", WS_CHILD | WS_VISIBLE,
80,90,80,20, main_hwnd, (HMENU)7, hInstance, NULL);

if (main_hwnd)
  {
  ShowWindow(main_hwnd, nCmdShow);
  UpdateWindow(main_hwnd);

  while (GetMessage(&msg, NULL, 0, 0) > 0)
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
  }

return msg.message;
}
