Tady si muzem dlouze povidat o API a rozvijet vasnive i krvave diskuse :-)))
Fórum › C / C++
Win32 - API a vse kolem nej
![](img/forum_vlakno_help_vyreseno.png)
no bolo by dobre nejako zacat :jj:
mne sa t win api nezda. veeela casu by podla mna trvalo ho ovladnut na takej urovni zeby som robil co si zmyslim :pila:
mna by zaujimalo ako to je s kompilatorom Borland c++ builder. Ten sa casto uvadza pri api aplikaciach. mate niekto s nim skusenosti ?
Nez se naucis jazyk na takovy urovni abys moh delat co si zmyslis, tak to taky trva a urcite to neni otazka jednoho tydne.
To sami je API, nakej cas to zabere, to ano, ale rozhodne ne moc vic, co dobry zvladnuti zakladu C/C++(myslim tim pouzitelne zaklady pro samostatnou cinnost).
Co se udava s C++Bulderem nevim, ani sem ho nikdy nezkousel a ani nechci, ten uz je dneska v kategorii klikacich prostredi, ktere cpou do kodu spoustu hovadin a smeti a to neni ono.
Win API je kvalitni cast c++ a jak jiz bylo receno ,builder je o nicem. Stejne tak ja osobne neuznavam VC ,i kdyz ano ,je pravda ,ze usnadnuje praci. Ale ten ,kdo chce byt opravdovy programator, si vezme navody, kody a Dev-C++ ,kde si vse musi delat sam a to je na programovani dobry ,delat si veci sam. A k tomu pomuze i Win32 API i Dev-C++ a samozdrejme samotne C++ :dabel:
Ja som asi posledneho pol roka vyvijal aplikaciu pod Win32 API kvoli praktickej maturite. Veci sa maju asi tak, ze vsetko co je spravene pod Windowsom ako GUI je spravene cez Win32 API (bez OOP). Je jedno ci to je vyvijane ako MFC, ATL, WTL, alebo cokolvek ine, vnutorne to je vsetko spravene cez Win32 API. Je pravda, ze vyssie spomenute OOP kniznice znacne urychluju vyvoj, ale napr. MFC (ktore je dost pouzivane) obsahuje vela chyb co priznava aj M$ (a to je uz co povedat, ked si to prizna samotny M$), dalej nieje uplne spatne kompatibilne so starsimi verziami a pomaly zacina byt dost klikacie.
Borland Builder je pekne prostredie poskytujuce asi najrychlejsi vyvoj GUI aplikacii, vdaka tomu ze obsahuje "klikacie" formy a komponenty. Tym odpadava starost programatora o implementaciu a inicializaciu roznych prvkov. Na jednej strane sa tym ziskava cas, ale na druhej kebyze date programatorovi spravit tu istu vec bez pouzitia spominanych komponent alebo foriem, tak je strateny.
Přiznávám se že jsem si na visuální třídy taky nikdy nezvyk, prostě to radši napíšu sám. Nehledě na to, kolik jich použijete ve vývoji? Většinou použijete jen okno a nazdar, zbytek už píšete sami, možná sem tam nějakej ten button, ale to je všechno.
Jedinej klad visualu vidim v tom že o svoje objekty se stará sám a tak se dá zamezit únikům paměti.
Jo, taková otázečka, jak se liší Win 16 od Win 32 API? Zatím mě napadlo ze zpráva mohla mít o jeden parametr míň, ale to fakt jen hádám.
WORD má ve Win 32 API 32 bitů? To jsem nevěděl...
Zajímaví, pak je tu spíš to že Win 16 už se dost dlouho nepoužívají
Sak na to nieje ani dovod. Malokto dnes bezi na 16 bitovych CPU, tak naco by sa pre vyvijali aplikacie. Podobny osud mozno caka aj 32 bitove, len to ma este svoj cas (mozno takych 10 - 15 rokov alebo aj viac).
Jo, zrovna se mi to tady hodí, mám problém s TransparentBlt. Normálně jsem v linkeru přidal msimg32, ale stále mi to píše, že FCE undeclared (mám Dev-Cpp). Nevíte někdo, co s tím?
Nakonec to našel strejda google, pomohlo připsat #define WINVER 0x0500 před Windows.h.
Snad to má co dělat s nekompatibilitou knihovny win u Dev-cpp.
Manuálně.
Ja som tiez zo zaciatku kodil vzhlad manualne, ale potom som mal spravit dva stlpce s asi 20 static a edit boxami, tak som to musel robit cez resource editor, inac by som sa zblaznil.
Je to tenhle problém http://www.gamedev.net/community/forums/topic.asp?topic_id=260901&whichpage=1?
Já se zatím spíš v WinAPI šťourám než bych pořádně codil, takže na tohle sem ještě nenarazil, zatim si držim všechny soubory projektu do 500 řádků.
Jo a vlastně ještě jeden dotaz, co kdo říkáte na knihu od Petzolda Programujeme windows?
Zatím jsem slyšel jen samou chválu. Ale zase na druhou stranu stojí docela balík.
Já vim, zvláště když se po netu povaluje tolik tutoriálů, ale zase taková referenční příručka....
když už to jednou člověk byl ochotne vypláznout za mistrovství....
a za příběh čaje :)...
... nedá mu to a vyplázne zase.
Stejně tak jako tak neodolím a časem mi přibyde do sbírky, jako všem, kteří to kdy s programováním pod Win mysleli vážně.
d1ce napsal:
... nedá mu to a vyplázne zase.
Stejně tak jako tak neodolím a časem mi přibyde do sbírky, jako všem, kteří to kdy s programovaním pod Win mysleli vážně.
Nejsem si jist jak moc to s ním myslím vážně, ale taky bych to viděl že mi někdy v budoucnu zatíží poličku. :nemůžu najít vhodného smajla. :O
Jen tak mimochodem, toto makro #define WINVER 0x0500, urcuje pro jakou verzi systemu se ma prekladat(samozrejme podmineny preklad). Vice treba zdehttp://www.radekchalupa.cz/blog.aspx?kod=205&obsah=84.
To bude ono, TransparentBlt totiž není podp. ve verzích win 95 a nižších.
Te? jsme ?e?ili probl?m s typedef u
typedef struct _WNDCLASSEX {
...
} WNDCLASSEX;
teoreticky to znamen? ?e pro strukturu je vytvo?eno z?st. jm?no _WNDCLASSEX a je vytv. strukturn? prom?nn? WNDCLASSEX z bezejmenn? struktury. To ale nefunguve jeloko? pak deklarujeme norm?ln? strukturn? prom?nnou v programu.
Tak?e to mus? zanemnat ?e typedef nahrad?
struct _WNDCLASSEX {
...
};
z?stupn?m jm?nem WNDCLASSEX.
Jen?e o mi p?ijde jako naprost? ...... jeliko? se to rovn? deklaraci
struct WNDCLASSEX{
...
};
??? :och:
Doted sem delal zatim jenom v builderech, ale protoze se uz nejakou dobu chci naucit i winAPI tak sem hledal nejaky vhodny clanky. Na builder.cz je docela obsahlej serial, ale bohuzel se mi zda, ze neni tak nejak ucelenej a skace z jednoho do druhyho. Proto sem rad ze vychazi i neco tady. A zatim se mi to zda o 100% lepsi. Je to hlavne o hodne srozumitelnejsi. Co me ale trapi je frekvence s jakou dily vychazej. Mnohdy mam uz po precteni jednoho dilu (a samozrejme i vyzkouseni) chut se pustit do dalsiho. Vim samozrejme, ze mnohdy to da dost prace, sam pisu serial na jinou tematiku, ale uvital bych castejsi pribyvani novych dilu. Pokud byste tedy nekdo vedel o necem podobnych - proste lidsky napsanym, tak mi prosim dejte vedet...
Asan napsal:
Te? jsme ?e?ili probl?m s typedef u
typedef struct _WNDCLASSEX {
...
} WNDCLASSEX;
teoreticky to znamen? ?e pro strukturu je vytvo?eno z?st. jm?no _WNDCLASSEX a je vytv. strukturn? prom?nn? WNDCLASSEX z bezejmenn? struktury. To ale nefunguve jeloko? pak deklarujeme norm?ln? strukturn? prom?nnou v programu.
Tak?e to mus? zanemnat ?e typedef nahrad?
struct _WNDCLASSEX {
...
};
z?stupn?m jm?nem WNDCLASSEX.
Jen?e o mi p?ijde jako naprost? ...... jeliko? se to rovn? deklaraci
struct WNDCLASSEX{
...
};
??? :och:
Mozna jsem nepochopil vas dotaz, ale zapis pres typedef mel sve opodtsatneni v cistem C, v podstate kdyz v C napisete:
struct nazev{
//..
};
Tak musite deklarovat promenne takto:
struct nazev promenna;
Kdezto:
typedef struct _nazev{
//...
} NAZEV;
vam umozni:
NAZEV prom1;
struct _nazev prom2;
V podstate jde spise jen o zprehledneni zapisu. Navic v C++ tento problem odpada. Ted doufam, ze jsem to pochopil. Kdyby prece jen ne, tak moji odpoved ignorujte..:)
No nejsem si úplně jist. Hlavně tímto:
NAZEV prom1;
struct _nazev prom2;
první řádek chápu, ale druhý ne, v základu by se ta struktura přece psala
struct NAZEV {...};
a pak používala jako
NAZEV prom1;
když ale napíšu typedef struct _nazev, tak mi to nahradí slovo struct slovem _nazev, ne? Nebo to má v kombinaci se strukturou ještě vedlejší účinky?
Jura_ napsal:
Mozna jsem nepochopil vas dotaz, ale zapis pres typedef mel sve opodtsatneni v cistem C, v podstate kdyz v C napisete:
struct nazev{
//..
};
Tak musite deklarovat promenne takto:
struct nazev promenna;
Kdezto:
typedef struct _nazev{
//...
} NAZEV;
vam umozni:
NAZEV prom1;
struct _nazev prom2;
V podstate jde spise jen o zprehledneni zapisu. Navic v C++ tento problem odpada. Ted doufam, ze jsem to pochopil. Kdyby prece jen ne, tak moji odpoved ignorujte..:)
Jo, u? jsem pochopil i j?, ale teoreticky by to nem?lo fungovat v C++, proto?e v C++ znamen? deklarace
struct {...}
N?ZEV;
To ?e vytvo??te jednu ?lenskou prom?nnou bezejmenn? struktury. N?sledn? deklarace
N?ZEV prom;
tedy neexistuje.
Díval jsem se do MSDN, je tam napsáno, že to funguje tak jak to funguje, ale není tam vysvětleno proč....
Asan napsal:
No nejsem si úplně jist. Hlavně tímto:
NAZEV prom1;
struct _nazev prom2;
první řádek chápu, ale druhý ne, v základu by se ta struktura přece psala
struct NAZEV {...};
a pak používala jako
NAZEV prom1;
Když ale napíšu typedef struct _nazev, tak mi to nahradí slovo struct slovem _nazev, ne? Nebo to má v kombinaci se strukturou ještě vedlejší účinky?
Ten druhy zapis(struct _nazev prom2) se pouziva v cistem C, pokud prekladate v C++, tak je to uplne fuk. A typedef u struktury je jen k tomu ze se vytvori novy datovy typ, ale pritom nenahrazuje klicove slovo(kopilator vas na to upozorni). Takze je to jakoby jste napsal
typedef struct _nazev NAZEV;
Zkratka je to jen dasli typ zapisu pro tu jednu a tu samou kokotinu jako je:
typedef struct _nazev{
}NAZEV;
Kdyz nepouzijete typedef, tak musite napsat(nemusite, ale je to jen, kvuli tomu abyste nemusel deklarovat promenne pres struct nazev promenna):
struct _nazev{
};
typedef struct _nazev NAZEV;
Asan napsal:
Jo, u? jsem pochopil i j?, ale teoreticky by to nem?lo fungovat v C++, proto?e v C++ znamen? deklarace
struct {...}
N?ZEV;
To ?e vytvo??te jednu ?lenskou prom?nnou bezejmenn? struktury. N?sledn? deklarace
N?ZEV prom;
tedy neexistuje.
To neni pravda. Zapisem
struct {
int b;
}NAZEV;
pouziti:
NAZEV.b=5; // stejne jako v C, kdyz nepouzijete typedef v deklaraci struktury
se vytvori promenna NAZEV, zadna clenska promenna. Tento zpusob zapisu vytvareni promennych prevzalo C++ uz od C.
Jura_ napsal:
Asan napsal:
Jo, u? jsem pochopil i j?, ale teoreticky by to nem?lo fungovat v C++, proto?e v C++ znamen? deklarace
struct {...}
N?ZEV;
To ?e vytvo??te jednu ?lenskou prom?nnou bezejmenn? struktury. N?sledn? deklarace
N?ZEV prom;
tedy neexistuje.
To neni pravda. Zapisem
struct {
int b;
}NAZEV;
pouziti:
NAZEV.b=5; // stejne jako v C, kdyz nepouzijete typedef v deklaraci struktury
se vytvori promenna NAZEV, zadna clenska promenna. Tento zpusob zapisu vytvareni promennych prevzalo C++ uz od C.
ANO, je vytvo?en? prom?nn? NAZEV, je? m? v?echny n?le?itosti struktury, JEN?E nen? mo?n? pou??t j? jako typ a deklarovat prom?nno tud??,
N?ZEV prom;
tedy neexistuje.
Jen jsem se upsal a m?sto strukturn? prom?nn? jsem napsal ?elnsk? prom?nn?. Samoz?ejm? je v prom?nn? N?ZEV p?istupovat k ?lensk?m prom?nn?m, ale nen? mo?n? deklarovat ??dnou dal?? prom?nnou stejnou jako N?ZEV.
Te? se jen ujist?m, v
typedef struct _nazev NAZEV;
je struct _nazev p?vodn? jm?no a NAZEV jm?no nahrazovac?.
A v C, pokud nap??
struct MOJE_STRUKURA {...};
mus?m pak deklarovat prom?nnou takto
struct MOJE_STRUKTURA PROMENNA;
(zat?mco tedy v C++ sta?? MOJE_STRUKTURA PROMENNA;)
ano?
Asan napsal:
Te? se jen ujist?m, v
typedef struct _nazev NAZEV;
je struct _nazev p?vodn? jm?no a NAZEV jm?no nahrazovac?.
A v C, pokud nap??
struct MOJE_STRUKURA {...};
mus?m pak deklarovat prom?nnou takto
struct MOJE_STRUKTURA PROMENNA;
(zat?mco tedy v C++ sta?? MOJE_STRUKTURA PROMENNA;)
ano?
Ano, presne tak. Jinak jsem si cetl svoje prispevky a omlouvam se, psal jsem to dost chaoticky.
V po??dku, j? to n?jk pobral, ale hlavn? z toho vypl?v? to co jsem psal jako prvn?
Tak?e to mus? zanemnat ?e typedef nahrad?
struct _WNDCLASSEX {
...
};
z?stupn?m jm?nem WNDCLASSEX.
Jen?e o mi p?ijde jako naprost? ...... jeliko? se to rovn? deklaraci
struct WNDCLASSEX{
...
};
Jen te? u? v?m ?e je to kv?li kompatibilit? s C, kter? m? drobet jinou syntaxi.
Mám problém při používání funkce ChangeDisplaySettings - přestože nastavím prvek dmPelsWidth struktury DEVMODE na určitou hodnotu, proběhnutí fci neudělá s rozlišením zhola nic.
NEmáte někdo něco, kde je tato struktura a funguje?
Asan napsal:
M?m probl?m p?i pou??v?n? funkce ChangeDisplaySettings - p?esto ?e nastav?m prvek dmPelsWidth struktury DEVMODE na ur?itou hodnout, prob?hnut? fci neud?l? s rozli?en?m zhola nic.
NEm?te n?kdo n?co kde je tato struktura a funguje?
A nastavil jste v strukture polozku dmFields?
Ta urcuje, ktere polozky struktury DEVMODE byly inicializov?ny.
Ano - nastavil a kupodiva tam byla ta chyba DM_PELSWIDTH | DM_PELSWIDTH
![](img/forum_nove_psp_new.png)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
![](/img/smile/1.gif)
![](/img/smile/2.gif)
![](/img/smile/3.gif)
![](/img/smile/4.gif)
![](/img/smile/5.gif)
![](/img/smile/6.gif)
![](/img/smile/7.gif)
![](/img/smile/8.gif)
![](/img/smile/9.gif)
![](/img/smile/10.gif)
![](/img/smile/11.gif)
![](/img/smile/12.gif)
![](/img/smile/13.gif)
![](/img/smile/14.gif)
![](/img/smile/15.gif)
![](/img/smile/16.gif)
![](/img/smile/17.gif)
![](/img/smile/18.gif)
![](/img/smile/19.gif)
![](/img/smile/20.gif)
![](/img/smile/21.gif)
![](/img/smile/22.gif)
![](/img/smile/23.gif)
![](/img/smile/24.gif)
![](/img/smile/25.gif)
![](/img/smile/26.gif)
![](/img/smile/27.gif)
![](/img/smile/28.gif)
![](/img/smile/29.gif)
![](/img/smile/30.gif)
![](/img/smile/31.gif)
![](/img/smile/32.gif)
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Šance pro nadějné redaktory (hry, progaming a vše kolem hw&sw) — založil dchecker
Správy v Win32 API — založil Rišo Kakaš
CHECKBOX WIN32 API — založil Loli
Win32 API - zdroje — založil Rišo Kakaš
Moderátoři diskuze