bravo... nadam se stickyu
Uđite u vas C++ program i odite >>New Source datoteka i kad vam se otvori prozor upisite kod:
Code:*------------------------------------------------------ CW11.c - Program koji na ekranu monitora ispisuje poruku ------------------------------------------------------*/ #include <Windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int nCmdShow) { /*Funkcija koja ispisuje poruku u prozoru i ime prozora */ MessageBox (NULL, "Pozdrav, ja sam vaš prvi C Windows program ,yo buraz!", "Jednostavna poruka", 0); return 0; }
Opis djelov programa:
-# /* */S- sve što se nalazi između ova dva znaka jest komentar unutar C programa.
-# #includeS- naputak kojim se u program uključuju datoteke.
-<Windows.h>S- zaglavna datoteka koja se uključuje u svaki Windows program. Sadrži definicije mnoštva drugih zaglavnih datoteka u kojima se nalaze definicije funkcija neophodnih za rad Windows programa.
-# WinMain()S- osnovna funkcija koju mora imati svaki Windows program (kao Main u C programu). Ova funkcija rabi niz poziva definiran za WINAPI i nakon što obavi posao vraća cijeli (int) broj. Parametri funkcije WinMain su:
- hInstance - tzv. "rukovatelj prozora". To je broj koji označava program koji se izvodi pod Windowsima. Ako korisnik pokrene više kopija istog programa, svaka od njih ima drugu vrijednost hInstance.
- hPrevInstance - tzv. "prethodni primjerak prozora" danas nije više u uporabi, ali je zadržan zbog ranijih verzija Windowsa. On je pokazivač na neposredni prethodni primjerak prozora koji je još uvijek aktivan. Prije nego što bi se mogla učitati bilo koja kopija programa vrijednost ovog parametra morala je biti NULL. Kod Win32 programa vrijednost ovog parametra uvijek je NULL.
- lpCmdLine - pokazivač je na string koji završava NULL znakom. Ovaj string sadrži bilo koje parametre koji dolaze od naredbenog retka kojim možete pokrenuti Windows program iz DOS-a.
- nCmdShow - broj je koji pokazuje kako će pripadajući prozor biti prikazan na ekranu (minimalan, maksimalan, skriven...). Ovo će vam postati jasnije u ostalim primjerima iz knjige jer prozor s porukom nema ovakve opcije.
-MessageBox() - funkcija koja na ekranu monitora prikazuje prozor s porukom (MessageBox). Ova funkcija ima četiri parametra:
- hWnd - označava prozor kojem prozor s porukom pripada. Ako je ovaj parametar NULL prozor s porukom nema vlasnika.
- szText - tekst koji će biti ispisan unutar prozora s porukom.
- szCaption - tekst koji će biti u okviru naslova (Titlebar) prozora.
- uType - ovaj parametar određuje stil (style) poruke s prozorom, tj. je li to upozorenje, poruka o greški itd. te koje će gumbe sadržavati. Ako je ovaj parametar "0", prozor s porukom sadržavat će gumb "OK" i neće imati nikakvu ikonu.
http://www.ubizeccorporation.bloger.hr/ Gaming and PC
YO Buraz Madafaka!
bravo... nadam se stickyu
It's time to kick some ass...
Jako lijepo! A kako napraviti prozor sa gumbićima, sliderima i takvim stvarima?
Izrada Prozora
Code:/*--------------------------------------------- CW21.c - PROTOTIP PROZORA - program koji kreira jednostavan prozor ---------------------------------------------*/ #include <Windows.h> /* Prototip funkcije s Windows procedurama */ LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM); /* Ime klase prozora */ static char gszClassName[]S = "MojaKlasaProzora"; /* Funkcija WinMain */ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX WndClass; HWND hwnd; MSG Msg; /* Registriranje klase prozora */ WndClass.cbSize = sizeof(WNDCLASSEX); WndClass.style = NULL; WndClass.lpfnWndProc = WindowProcedure; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hInstance = hInstance; WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW); WndClass.lpszMenuName = NULL; WndClass.lpszClassName = gszClassName; WndClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); /* Provjera je li klasa prozora registrirana */ if(!RegisterClassEx(&WndClass)) { MessageBox(0, "Registriranje prozora nije uspjelo!", "Greška!", MB_ICONSTOP | MB_OK); return 0; } /* Kreiranje prozora */ hwnd = CreateWindowEx( WS_EX_STATICEDGE, gszClassName, "Naslov", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 400, NULL, NULL, hInstance, NULL); /* Provjera je li prozor uspješno kreiran */ if(hwnd == NULL) { MessageBox(0, "Kreiranje prozora nije uspjelo!", "Greška!", MB_ICONSTOP | MB_OK); return 0; } /* Prikazivanje prozora na ekranu */ ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); /* Petlja koja obrađuje poruke */ while(GetMessage(&Msg, NULL, 0, 0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } /* Odjava klase prozora */ UnregisterClass("MojaKlasaProzora",hInstance); return Msg.wParam; } /* Funkcija s Windows procedurama */ LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch(Message) { case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, Message, wParam, lParam); } return 0; }
Evo kako je inicijaliziran jednostavan prozor iz primjera:
hwnd = CreateWindowEx(
WS_EX_STATICEDGE - stil prozora definiran identifikatorom WS_EX_STATICEDGE. Objašnjenje identifikatora možete naći pri kraju poglavlja.
gszClassName - registrirano ime klase prozora je "MojaKlasaProzora"
"Naslov" - tekst koji se pojavljuje u naslovu programa
WS_OVERLAPPEDWINDOW - stil prozora definiran identifikatorom WS_OVERLAPPEDWINDOW
CW_USEDEFAULT - x-koordinata gornjeg lijevog ugla definirana identifikatorom CW_USEDEFAULT
CW_USEDEFAULT - y-koordinata gornjeg lijevog ugla definirana identifikatorom CW_USEDEFAULT
500 - širina prozora u pikselima
400 - visina prozora u pikselima
NULL - ako prozor ne pripada drugom prozoru (roditeljskom) ovaj parametar ima vrijednost NULL.
NULL - ako prozor nema izbornik ili nije prozor-potomak ovaj parametar ima vrijednost NULL.
hInstance - rukovatelj pokazuje na aktivni prozor
NULL - ovaj parametar ima vrijednost NULL, osim ako definirate svoju strukturu.
http://www.ubizeccorporation.bloger.hr/ Gaming and PC
YO Buraz Madafaka!
Jako lijepo! Sad još gumbiće i ja sretan
eh... do gumbica... nisu teski...
gore kod includea napravis
onda ovo ispod "MojaKlasaProzora"Code:#define IDC_GUMB 21
ovo iznad WndClass.cbSize = sizeof(WNDCLASSEX);Code:HINSTANCE hInst = NULL;
ovo kod switch message...Code:hInst = hInstance;
Code:HWND hGumb;ontopic prerasiren kodCode:case WM_CREATE : /* Kreiranje gumba */ hGumb = CreateWindowEx(0, "Button", "About...", WS_CHILD | WS_VISIBLE, 400, 330, 80, 30, hwnd, (HMENU) IDC_GUMB, hInst, NULL); /* Provjera je li kontrola uspješno kreirana */ if(!hGumb) { MessageBox(0, "Kreiranje gumba nije uspjelo", "Greška", MB_ICONSTOP | MB_OK); return 0; }
btw tucakovic?
It's time to kick some ass...
I kako ću sada napraviti da mi kad pritisnem gumb dođe MessageBox sa nekim textom?
to dode ispod onog gore kodaCode:case WM_COMMAND: switch(wParam) { case IDC_GUMB: MessageBox(0, "Programmed by: fps_gamer", "About...", MB_OK); return 0; }
It's time to kick some ass...
Uff... ovo su poprilično stare tehnologije (bez uvrede). Zašto se uopće mučiš definicijom prozora kroz klasu, a kamoli deklariranjem identifikatora za objekte i objektnim mapama kad imaš razvojna okruženja poput C++ builder-a koja to imaju integrirano i preko IDE-a tj. form editora automatski za tebe pišu definiciju klase i sve event handlere? Štoviše, automatski ti dopišu i prazna tijela event funkcija
tako je veci gust... sta nije??
It's time to kick some ass...
pa sad... ovisi što radiš. ako je riječ o ovako nečem jednostavno može biti, no zamisli aplikaciju od 15ak prozora s nekim minimalnim funkcionalnostima. ovdje bi se nagomilalo par kilometara koda, i nedao Bog da je negdje neka logička greška jer bi netko proveo vesele noći analizirajući sav taj kodIzvorno postao fps_gamer
Ovo o čemu ti pišeš je klasični MFC pristup tj. realizacija windows aplikacija kroz čiste klase, no malo pogledaj i konkurentska rješenja jer umjesto ovakvih klasa koriste biblioteke tj. design-time i run-time komponente što 10ak puta ubrzava pisanje aplikacija
ma... ja nemam velike projekte sa win programiranjem za sada... dosta komplicirano... tj. puno koda...
It's time to kick some ass...
Gle ko oce programirat mora se mucit(ak nezna) .Svaka aplikacija ili igra sadrzi puno puno kodova zato i postoje Timovi koji to rade po mjesecima i godinama jel dobr djelo ne nastaje preko noći(ova je dobra dobra )!
http://www.ubizeccorporation.bloger.hr/ Gaming and PC
YO Buraz Madafaka!