Bad transmission of parameters from edit button
Hi,
I'm new with windows programming. My application is calculator with 3 edit buttons, and few button operator. After input numbers in edit, they should be calculated and put into edit3. And there is the problem, number in edit3 is enormous huge, 0 + 0 = 1984502288.
Please help me :D
Code:
#include <windows.h>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <string>
#define SPACE " "
HWND djednako, dplus, dminus, dputa, dkroz, Edit1, Edit2, EditRezultat;
void FatalnaGreska(const char poruka[]) {
MessageBox(0, poruka, "Fatalna greska!", MB_OK | MB_ICONEXCLAMATION);
std::exit(1);
}
int uzmiBroj(HWND prozor, HWND h, int broj, char (spremnik)[2]){
SendMessage(h, EM_LIMITTEXT, 0, 0L);
int len = GetWindowTextLength(h);
GetWindowText(h, spremnik, len);
broj = atoi(spremnik);
if (h == NULL) {MessageBox(prozor, "Unesite broj u prazno polje.", "Poruka", MB_OK);}
return broj;
}
LRESULT CALLBACK Dispecer(HWND prozor, UINT poruka, WPARAM p1, LPARAM p2) {
RECT okvir;// STRUKTURA: left, top, right, bottom, prect
int notifikacija;
HWND ko_je_poslao_komandu;
char spremnik1[2], spremnik2[2], spremnik3[2];
int broj1, broj2=0, rezultat;
int op=0;
switch(poruka) {
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
ko_je_poslao_komandu = HWND(p2);
notifikacija = HIWORD(p1);
if (op!=0) uzmiBroj(prozor, Edit1, broj1, spremnik1);
if (ko_je_poslao_komandu == dplus && notifikacija == BN_CLICKED){op = 1;}
if(ko_je_poslao_komandu == dminus && notifikacija == BN_CLICKED){op = 2;}
if (ko_je_poslao_komandu == dputa && notifikacija == BN_CLICKED){op = 3;}
if (ko_je_poslao_komandu == dkroz && notifikacija == BN_CLICKED){op = 4;}
/*
if ((ko_je_poslao_komandu == dplus || ko_je_poslao_komandu == dminus || ko_je_poslao_komandu == dputa || ko_je_poslao_komandu == dkroz) && notifikacija == BN_CLICKED){
uzmiBroj(prozor, Edit1, broj1, spremnik1);}*/
if(ko_je_poslao_komandu == djednako && notifikacija == BN_CLICKED) { uzmiBroj(prozor, Edit2, broj2, spremnik2);
switch(op){
case 1: rezultat = broj1 + broj2; break;
case 2: rezultat = broj1 - broj2; break;
case 3: rezultat = broj1 * broj2; break;
case 4: rezultat = broj1 / broj2; break;
//return rezultat;
}
//itoa(rezultat, spremnik3, 10);
sprintf(spremnik3, "%d", rezultat);
SetWindowText(EditRezultat, spremnik3);
SendMessage(EditRezultat, EM_LIMITTEXT, 0, 0L);
}
default:
return DefWindowProc(prozor, poruka, p1, p2);
}
return 0;
}
int main() {
HINSTANCE aplikacija(GetModuleHandle(0));
WNDCLASSEX prozorska_klasa;
prozorska_klasa.hInstance = aplikacija;
prozorska_klasa.lpszClassName = "MOJPROZOR";
prozorska_klasa.lpfnWndProc = Dispecer;
prozorska_klasa.style = CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW;
prozorska_klasa.cbSize = sizeof(WNDCLASSEX);
prozorska_klasa.hIcon = LoadIcon(0, IDI_APPLICATION);
prozorska_klasa.hIconSm = LoadIcon(0, IDI_APPLICATION);
prozorska_klasa.hCursor = LoadCursor(0, IDC_ARROW);
prozorska_klasa.lpszMenuName = 0;
prozorska_klasa.cbClsExtra = 0;
prozorska_klasa.cbWndExtra = 0;
prozorska_klasa.hbrBackground = HBRUSH(COLOR_BTNFACE + 1);
if(!RegisterClassEx(&prozorska_klasa)) FatalnaGreska("Problem u registraciji prozorske klase!");
HWND prozor(CreateWindowEx(WS_EX_CLIENTEDGE, "MOJPROZOR",
"Kalkulator", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, 280, 250, 0, 0, aplikacija, 0));
if(!prozor) FatalnaGreska("Problem u kreiranju prozora!\n");
Edit1 = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT",
" ", WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | ES_NUMBER | ES_RIGHT
| ES_LOWERCASE, //:left x, top y, sirina, visina
10, 10, 100, 30, prozor, 0, aplikacija, 0);
Edit2 = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT",
" ", WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | ES_NUMBER | ES_RIGHT
| ES_LOWERCASE, //:left x, top y, sirina, visina
10, 90, 100, 30, prozor, 0, aplikacija, 0);
EditRezultat = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT",
" ", WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | ES_NUMBER | ES_RIGHT
| ES_LOWERCASE, //:left x, top y, sirina, visina
10, 170, 100, 30, prozor, 0, aplikacija, 0);
djednako = CreateWindowEx(WS_EX_CLIENTEDGE, "BUTTON",
"=", WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE,
10, 130, 50, 30, prozor, 0, aplikacija, 0);
dkroz = CreateWindowEx(WS_EX_CLIENTEDGE, "BUTTON",
"/", WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE,
70, 50, 50, 30, prozor, 0, aplikacija, 0);
dputa = CreateWindowEx(WS_EX_CLIENTEDGE, "BUTTON",
"*", WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE,
10, 50, 50, 30, prozor, 0, aplikacija, 0);
dminus = CreateWindowEx(WS_EX_CLIENTEDGE, "BUTTON",
"-", WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE,
130, 50, 50, 30, prozor, 0, aplikacija, 0);
dplus = CreateWindowEx(WS_EX_CLIENTEDGE, "BUTTON",
"+", WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE,
190, 50, 50, 30, prozor, 0, aplikacija, 0);
ShowWindow(prozor, SW_SHOW);
UpdateWindow(prozor);
MSG poruka;
int status;
while(status = GetMessage(&poruka, 0, 0, 0) > 0) {
TranslateMessage(&poruka);
DispatchMessage(&poruka);
}
if(status < 0) FatalnaGreska("Problem u obradi poruka!\n");
return poruka.wParam;
}
Thanks in advance. :)