Code:
#include <windows.h>#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <string>
#define SPACE " "
HWND djednako, dplus, dminus, dputa, dkroz, drec, dsqrt, dexp, d10, Edit1, Edit2, EditRezultat;
void FatalnaGreska(const char poruka[]) {
MessageBox(0, poruka, "Fatalna greska!", MB_OK | MB_ICONEXCLAMATION);
std::exit(1);
}
int broj1, broj2, rezultat;
int op;
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[200], spremnik2[200], spremnik3[200];
switch(poruka) {
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
ko_je_poslao_komandu = HWND(p2);
notifikacija = HIWORD(p1);
if (ko_je_poslao_komandu == djednako && notifikacija == BN_CLICKED){
GetWindowText(Edit1, spremnik1, sizeof spremnik1);
GetWindowText(Edit2, spremnik2, sizeof spremnik2);
broj1 = atoi(spremnik1);
broj2 = atoi(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;
case 5: rezultat = 1 / broj1; break;
case 6: rezultat = sqrt(broj1); break;
case 7: rezultat = pow(broj1, broj2); break;
case 8: rezultat = pow(broj1, 10); break;
}
itoa (rezultat, spremnik3, 10);
SetWindowText(EditRezultat, spremnik3);
}
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 == drec && notifikacija == BN_CLICKED){
op = 5;
}
if (ko_je_poslao_komandu == dsqrt && notifikacija == BN_CLICKED){
op = 6;
}
if (ko_je_poslao_komandu == dexp && notifikacija == BN_CLICKED){
op = 7;
}
if (ko_je_poslao_komandu == d10 && notifikacija == BN_CLICKED){
op = 8;
}
break;
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,
270, 290, 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
75, 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,
75, 130, 100, 30, prozor, 0, aplikacija, 0);
EditRezultat = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | ES_NUMBER | ES_RIGHT
| ES_LOWERCASE, 75, 210, 100, 30, prozor, 0, aplikacija, 0);
djednako = CreateWindowEx(WS_EX_CLIENTEDGE, "BUTTON", "=", WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 105, 170, 50, 30, prozor, 0,
aplikacija, 0);
dplus = 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, 70, 50, 50, 30, prozor, 0,
aplikacija, 0);
dputa = CreateWindowEx(WS_EX_CLIENTEDGE, "BUTTON", "*", WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 130, 50, 50, 30, prozor, 0,
aplikacija, 0);
dkroz = CreateWindowEx(WS_EX_CLIENTEDGE, "BUTTON", "/", WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 190, 50, 50, 30, prozor, 0,
aplikacija, 0);
drec = CreateWindowEx(WS_EX_CLIENTEDGE, "BUTTON", "1/x", WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 10, 90, 50, 30, prozor, 0,
aplikacija, 0);
dsqrt = CreateWindowEx(WS_EX_CLIENTEDGE, "BUTTON", "x^1/2", WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 70, 90, 50, 30, prozor, 0,
aplikacija, 0);
dexp = CreateWindowEx(WS_EX_CLIENTEDGE, "BUTTON", "x^y", WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 130, 90, 50, 30, prozor, 0,
aplikacija, 0);
d10 = CreateWindowEx(WS_EX_CLIENTEDGE, "BUTTON", "10^x", WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE, 190, 90, 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;
}