XP vzhľad tlačidiel – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

XP vzhľad tlačidiel – C / C++ – Fórum – Programujte.comXP vzhľad tlačidiel – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Johan
~ Anonymní uživatel
4 příspěvky
28. 12. 2009   #1
-
0
-

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;

Nahlásit jako SPAM
IP: 195.91.79.–
Reklama
Reklama
Johan
~ Anonymní uživatel
4 příspěvky
28. 12. 2009   #2
-
0
-

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?

Nahlásit jako SPAM
IP: 195.91.79.–
liborb
~ Redaktor
+18
Guru
29. 12. 2009   #3
-
0
-

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íš.

Nahlásit jako SPAM
IP: 85.207.166.–
Johan
~ Anonymní uživatel
4 příspěvky
29. 12. 2009   #4
-
0
-

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?

Nahlásit jako SPAM
IP: 195.91.79.–
liborb
~ Redaktor
+18
Guru
30. 12. 2009   #5
-
0
-

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.

Nahlásit jako SPAM
IP: 85.207.166.–
Johan
~ Anonymní uživatel
4 příspěvky
30. 12. 2009   #6
-
0
-

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);

Nahlásit jako SPAM
IP: 195.91.79.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 196 hostů

Podobná vlákna

MessageBox bez tlacidiel — založil Tayson

XPath a metoda StartWidth — založil VladislavK

Programátor C# /XPF Plzeň — založil tomcer

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý