Zdravím potreboval by som pomôcť s prvkami button vo WIN API. Používam dev-c++ a toto prostredie je trošku problematické z tohto hľadiska. Nedarí sa mi nastaviť xp vzhľad buttonov, ani po prečítaní http://www.builder.cz/art/cpp/winapi11.html
tohto clanku. Pri funkcii BOOL InitCommonControlsEx(LPINITCOMMONCONTROLSEX lpInitCtrls); mi kompilátor hádže chybu, prilinkoval som -lcomctl32, vložil som hlavičkoví súbor commctrl.h, a potom vložil
INITCOMMONCONTROLSEX icc;
icc.dwSize = sizeof(INITCOMMONCONTROLSEX);
icc.dwICC = ICC_WIN95_CLASSES;
Fórum › C / C++
XP vzhľad tlačidiel
Ospravedlňujem sa za nepresný popis. Podarilo sa mi zistiť, že v dev musím kôli manifestom nastaviť podporu xp tém, tým by sa aj vyriešil problém xp button, no teraz ma zaujíma, či sa comctl32 z iných prostredí dá 100% nahradiť prilinkovaním -lcomctl32, alebo potrebujem ešte prilinkovať niečo iné. Pýtam sa to pretože ak vytváram stavový riadok starou funkciou CreateStatusWindow
všetko je v poriadku. Ak však použijem CreateWindowEx tak okno len preblikne. To znamená podľa všetkého, že mi chýba comctl32. Ako je to možné keď mám prilinkované lcomctl32?
Jenom pro úplnost. Manifestem říkáš, že chceš použít novější knihovnu Common-Controls a pak dostaneš XP vzhled (resp. už si ho dostal :smile1: ). InitCommonControlsEx bys musel použít tak jako tak, pokud chceš používat nějaký ovládací prvek CC.
A k tvému dalšímu problému. Co vrací CreateWindowEx? Jestli NULL, tak se podívej, co říká GetLastError. Taky to ovšem může být jenom tak, že si StatusBar vytvořil a dál se o něj "nestaráš" a proto ho nevidíš.
Díky. A WinApi pracujem zhruba týžden preto tie blbé otázky. Teraz aby som si to odrovnal: Ak chcem používať xp vzhľad stáčí pridať manifest? Teda v dev to znamená odfajknúť v nastav. projektu podpora tém windows xp a prilinkovať lcomctl? Ked spravím toto tak väčšinou všetko pekne beží. Ale ak použijem zdroják(kostru) winapi, ktorú ma v sebe dev-cpp a vytvorím si button funkciou CreateWindowEx, tak kým nenastavím tu podporu tém win xp, dovtedy je všetko v poriadku. Akonáhle však nastavím podporu tém xp CreateWindowEx nadobúda hodnotu NULL. Písal si, (čo sa týkalo toho statusbaru) že sa mám oň postarať. Ako?
Pokud chceš používat XP vzhled, tak opravdu stačí manifest (viz příklad v tom linku, co si uvedl). Je to tak, že jsou k dispozici 2 verze knihovny comctl32.dll (5 a 6), implicitně se používá verze 5 (starý vzhled) a tím manifestem říkáš, že chceš používat novější verzi (6 - nový vzhled).
Jak je to v dev-cpp ti nepovím, protože ho (naštěstí) nepoužívám. Ale pokud ti CreateWindowEx vrací NULL, tak (jak jsem psal dříve) se povídej, co vrací GetLastError. Kód chyby ti třeba řekne v čem je problém http://msdn.microsoft.com/en-us/library/ms681381%28VS.85%29.aspx.
Mělo by stačit přidat ten manifest (jako resource) do projektu. V MVS je na to speciální kolonka, takže se tam nemusí nic řešit :smile1: .
A s tím StatusBar je to tak, že mu musíš alespoň přeposílat WM_SIZE (je to napsané i v tom příkladu, co si zalinkoval), jinak se ti stane, že se StatusBar vytvoří, ale buď ho překryje jiné okno nebo bude mít původní velikost.
Dakujem. Pomohlo mi, pridat #define _WIN32_IE 0x0301 , a potom pred vytvorenim okna
INITCOMMONCONTROLSEX icc;
icc.dwSize = sizeof(INITCOMMONCONTROLSEX);
icc.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&icc);
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
Uživatelé prohlížející si toto vlákno
Podobná vlákna
MessageBox bez tlacidiel — založil Tayson
Position: absolute; vzhladom k inemu divu — založil Onsi
Parťáci do firmy - PHP, XML a XPaths — založil AiraG
Java applet pro XPort — založil sputnikone
Poznamka k novemu vzhladu pg.com: vela textov — založil greppi
Moderátoři diskuze