Image
7.6.2016 0 Comments

ASSEMBLER pod Windows: Resource I (10. časť)

Späť na úvod >> Späť na programovanie >> Späť na seriál

Prakticky každý program vo Windows používa zdroje (angl. resources). RC resource script súbor definuje také veci ako menu, dialógové okná, ikony, bitmapy a iné zdrojové dáta vyžadované aplikáciou. Súbor prostriedkov zabraňuje tomu, aby ste museli mať množstvo separátnych súborov, ktoré by aplikácia nahrávala podľa potreby do pamäte. Resources script súbory sa kompilujú pomocou

kompilátora prostriedkov rc.exe. Nájdete ho v adresári bin a posledná jeho verzia je Microsoft Windows Resource Compiler, Version 5.00.1823.1 – Build 1823. Len čo je skompilovaný programový súbor *.exe, súbor *.res sa pripojí na jeho koniec. Všetky definované prostriedky v súbore *.rc sú teraz súčasťou programového *.exe a počas vykonávania programu ich možno používať.

Windows ponúka funkcie, ktoré načítajú programové zdroje do pamäte, aby mohli byť použité. S dvoma takýmito funkciami ste sa už stretli. Ide o funkcie LoadIcon a LoadCursor. Boli použité v ukážkových programoch v časti, ktorá definuje štruktúru triedy okna. Jedinou výhodou používania zdrojov je možnosť pripojiť niekoľko typov zdrojov priamo k programovému *.exe súboru. Ak by nebolo možné tento mechanizmus použiť, museli by byť binárne súbory, ako napr. ikony, obrázky, umiestnené v samostatných súboroch, ktoré by potom *.exe súbor podľa potreby načítal do pamäte. Prípadne by napr. ikona musela byť v programe definovaná ako pole bajtov. No pokiaľ je ikona zdrojom, je umiestnená v samostatnom editovateľnom súbore *.rc a do súboru *.exe je pridaná počas linkovania programu. Výpis jednoduchého resource script súboru nájdete na www.pcrevue.sk; na obrázku 1 je jeho grafická reprezentácia.

Pri resource súboroch rozlišujeme jednoriadkové (napr. BITMAP, CURSOR, ICON, FONT...) a viacriadkové (napr. MENU, DIALOG, RCDATA, STRINGTABLE...) príkazy. Viacriadkové príkazy používajú na definovanie bloku dát príkazy BEGIN a END (pozri výpis resource script súboru).

Aplikácie používajú v správach a znakovom výstupe textové reťazce. Windows poskytuje tabuľky reťazcov ako alternatívu ku konvenčnej metóde umiestňovania reťazcov v programovom *.exe súbore. Textové reťazce sú definované v súbore prostriedkov a každý má priradenú hodnotu ID.

STRINGTABLE

BEGIN

  IDS_STRING1 “Out of Memory“

  IDS_STRING2 “Out of Range“

END

Hodnoty ID reťazca môžete definovať na začiatku resource súboru pomocou príkazu #define. Prípadne môžete použiť externý súbor pre lepšiu prehľadnosť. Tento súbor potom vložíte do resource súboru pomocou príkazu #include. Keď potrebujete tieto reťazce použiť, pomocou funkcie LoadString sa skopírujú reťazce zo súboru prostriedkov do vyrovnávacej pamäte. Reťazce môžu obsahovať aj riadiace znaky, napr. tabulátor, koniec riadka a pod. Výhodou používania tabuľky reťazcov je redukcia používania pamäte. Reťazce nezaberajú pamäť, pokiaľ nie sú potrebné. Windows nahráva reťazce po blokoch podľa ID. Reťazce, pri ktorých je pravdepodobné, že budú používané spoločne, by mali byť číslované sekvenčne v malých skupinách. Ďalšou výhodou umiestnenia reťazcov do tabuľky reťazcov je podpora viacerých jazykov. Win32 API podporuje viacjazyčné prostriedky v jednej aplikácii. Totiž rovnaký programový súbor *.exe môže byť bez zmeny distribuovaný v niekoľkých krajinách.

Použitie tabuľky reťazcov stráca zmysel, pokiaľ sú reťazce skopírované do statickej vyrovnávacej pamäte. Vyrovnávacia pamäť bude zaberať miesto, aj keď nebude obsahovať nijaké dáta. Aplikácia by mala nahrávať reťazce do zásobníkových premenných alebo do globálne alokovanej pamäte.

Súbor prostriedkov môže byť použitý aj pre iný typ statických dát. Tieto dáta sú definované pomocou príkazu RCDATA.

MyData RCDATA

BEGIN

   10

   0x0234

   “Out of Memory“

   “Out of Range“

END

subor1  TEXT       “config.ini“

subor2  METAFILE   “car.bmp“

Najlepším miestom na uloženie dát vlastných prostriedkov je externý súbor. Riadky s príkazmi TEXT a METAFILE definujú vlastné prostriedky. Kompilátor prostriedkov číta z týchto súborov a umiestňuje dáta do súboru prostriedkov vykonateľného programu. Funkcie FindResource a FindResourceEx sa používajú na vyhľadávanie dát vlastných prostriedkov. Funkcia LoadResource nahrá prostriedok do pamäťového bloku.

Ďalším významným prvkom resource súborov sú dialógové okná. Dialógové okná väčšinou vyžadujú od používateľa zadanie vstupných dát pre nejakú špecifickú úlohu, napr. vyhľadanie reťazca v textovom dokumente a pod. Dialógové okná používajú šablóny, ktoré definujú ovládacie prvky v danom okne. Tieto šablóny sú definované v súbore prostriedkov *.rc pomocou príkazu DIALOG (pozri listing Simple resource na www.pcrevue.sk). Je ich možné vytvárať aj v pamäti dynamicky, počas behu aplikácie. Skôr ako sa pustíme do opisu ovládacích prvkov pre dialógové okná, potrebujete poznať štýly ovládacích prvkov.

Štýly tlačidiel

BS_3STATE – Vytvára zaškrtávacie políčko s tromi stavmi výberu. Zaškrtávacie pole môže byť buď nezaškrtnuté, zaškrtnuté, alebo tlmené (sivé). Tlmeným stavom sa vyjadruje stav, keď hodnota zaškrtávacieho políčka nie je stanovená.

BS_AUTO3STATE – Rovnaké ako BS_3STATE, s výnimkou toho, že zaškrtávacie políčko mení svoj stav, keď ho používateľ vyberie.

BS_AUTOCHECKBOX – Rovnaké ako BS_CHECKBOX, s výnimkou toho, že zaškrtávacie políčko mení svoj stav, keď ho používateľ vyberie.

BS_AUTORADIOBUTTON – Rovnaké ako BS_RADIOBUTTON, s výnimkou toho, že prepínač je vybraný, keď naň používateľ klikne a výber všetkých ostatných prepínačov v skupine je zrušený.

BS_BITMAP – Vytvára tlačidlo, ktoré zobrazí bitovú mapu.

BS_BOTTOM – Umiestni titulok do spodnej časti pravouholníka tlačidla.

BS_CENTER – Vycentruje titulok horizontálne v pravouholníku tlačidla.

BS_CHECKBOX – Vytvára zaškrtávacie políčko, ktoré má titulok zobrazený na pravej strane, pokiaľ nie je použitý štýl BS_LEFT.

BS_DEFPUSHBUTTON – Vytvára tlačidlo, ktoré je stlačené, keď používateľ stlačí kláves ENTER.

BS_GROUPBOX – Vytvára rám, ktorý má titulok zobrazený v ľavom hornom rohu. Používa sa najmä pri zoskupovaní prvkov RADIOBUTTON, resp. CHECKBOX.

BS_ICON – Vytvára tlačidlo, ktoré bude zobrazovať ikonu.

BS_LEFT – Zarovná titulok v pravouholníku tlačidla vľavo. Ak je týmto tlačidlom zaškrtávacie políčko alebo prepínač a nemá štýl BS_RIGHTBUTTON, text je zarovnaný vľavo na pravej strane.

BS_LEFTTEXT – Umiestni text na ľavú stranu prepínača alebo zaškrtávacieho políčka.

BS_MONO – Určuje, že tlačidlo má pre titulok iba jeden riadok textu.

BS_MULTILINE – Určuje, že tlačidlo má pre titulok viac riadkov textu. Pokiaľ je titulok príliš dlhý a nevojde sa na jeden riadok, bude zalomený na druhý riadok.

BS_NOTIFY – Posiela materskému oknu správy s oznámením. Toto je prídavok k BN_CLICKED a BN_DBLCLK, ktoré sú posielané implicitne.

BS_OWNERDRAW – Vytvára owner-drawn tlačidlo. Materské okno dostane správu WM_MEASUREITEM, keď je tlačidlo vytvorené, a správu WM_DRAWITEM vždy, keď je potrebné tlačidlo vyfarbiť. Tento štýl by sa nemal kombinovať so žiadnymi inými štýlmi tlačidiel.

BS_PUSHBUTTON – Vytvára tlačidlo, ktoré, keď je vybrané, posiela materskému oknu správu WM_COMMAND.

BS_PUSHLIKE – Prinúti zaškrtávacie políčko alebo prepínač, aby mal vzhľad a akciu tlačidla.

BS_RADIOBUTTON – Vytvára prepínač, ktorý má titulok zobrazený na pravej strane, pokiaľ nie je použitý štýl BS_LEFT.

BS_RIGHTBUTTON – Umiestni oblasť pre výber prepínača alebo zaškrtávacieho políčka na pravú stranu pravouholníka tlačidla.

BS_TEXT – Určuje, že tlačidlo zobrazuje text.

BS_TOP – Umiestni titulok do hornej časti pravouholníka tlačidla.

BS_VCENTER – Vertikálne vycentruje titulok v pravouholníku tlačidla.

 

Štýly polí so zoznamom

CBS_ AUTOHSCROLL – Umožňuje horizontálne posúvanie v editovateľnom ovládacom prvku poľa so zoznamom.

CBS_DISABLENOSCROLL – Vynúti si, aby bol zobrazený vertikálny rolovací pruh aj vtedy, keď sú všetky položky zoznamu viditeľné. Ak nebude rolovací pruh na zobrazenie všetkých položiek potrebný, bude neaktívny. Normálne je rolovací pruh zobrazený iba vtedy, keď je to potrebné.

CBS_DROPDOWN – Vytvára roztváracie pole so zoznamom. Zoznam je zobrazený iba vtedy, keď sa vykonáva výber.

CBS_DROPDOWNLIST – Vytvára pole s roztváracím zoznamom. Editovanie nie je povolené a vyberať možno iba zo zobrazených položiek.

CBS_HASSTRINGS – Používa sa pri owner-drawn poliach so zoznamami na špecifikáciu reťazcov, ktoré budú k poľu so zoznamom pridané. Aplikácia môže potom použiť na vyhľadanie určitej položky správu CB_GETLBTEXT.

CBS_LOWERCASE – Vynúti si, aby boli do editovateľného ovládacieho prvku zadávané iba malé písmená, a to tak, že pri zadávaní robí automatickú konverziu veľkých písmen na malé.

CBS_NOINTEGRALHEIGHT – Vynúti si, aby malo pole so zoznamom presne určenú veľkosť. Windows implicitne nastaví veľkosť poľa so zoznamom tak, aby žiadne položky nemohli byť zobrazené čiastočne.

CBS_OEMCONVERT – Zadaný text bude prevedený zo znakovej sady Windows do znakovej sady OEM a potom späť do sady Windows. Tým sa zabezpečí prevod pri použití funkcie AnsiToOem.

CBS_OWNERDRAWFIXED – Vytvára owner-drawn pole so zoznamom. Rodič dostane správu WM_MEASUREITEM, keď sa pole so zoznamom vytvorí, a správu WM_DRAWITEM, keď je potrebné vyfarbiť niektorú položku.

CBS_OWNERDRAWVARIALE – rovnaký ako CBS_OWNERDRAWFIXED, s výnimkou toho, že každá položka v zozname môže mať nastavenú inú veľkosť. Pre položku v poli so zoznamom je zavolaná správa  WM_MEASUREITEM skôr, než pre tú istú položku je zavolaná správa WM_DRAWITEM.

CBS_SIMPLE – Vytvára jednoduché pole so zoznamom, kde je zoznam položiek stále zobrazený a v editovateľnom ovládacom prvku je aktuálny výber.

CBS_SORT – Zoradí reťazce pridané do zoznamu pomocou správy CB_ADDSTRING.

CBS_UPPERCASE – Vynúti si, aby boli do editovateľného ovládacieho prvku zadávané iba veľké písmená, a to tak, že pri zadávaní konvertuje malé písmená na veľké.

 

Štýly dialógových okien

DS_ABSALIGN – Umiestňuje dialógové okno relatívne k ľavému hornému rohu obrazovky.

DS_FIXEDSYS – Namiesto SYSTEM_FONT používa SYSTEM_FIXED_FONT.

DS_MODALFRAME – Vytvára dialógové okno s rámom modálneho dialógového okna.

DS_NOFAILCREATE – Vytvorí dialógové okno aj vtedy, keď počas vytvárania dôjde k chybám.

DS_NOIDLEMSG – Po dobu, keď je zobrazené dialógové okno, ignoruje správy WM_ENTERIDLE smerujúce do rodiča.

DS_RECURSE – Vytvára dialógové okno v podobe ovládacieho prvku (control-like).

DS_SETFONT – Používa sa na zistenie, že šablóna dialógového okna obsahuje informácie o písmach. Windows odovzdáva handle písma jednotlivým ovládacím prvkom v dialógovom okne správou WM_SETFONT.

DS_SETFOREGROUND – (použiteľné iba pre Windows NT)  Vynúti si, aby bolo dialógové okno na popredí, volaním funkcie SetForegroundWindow.

DS_SYSMODAL – Vytvára systémové modálne dialógové okno.

 

Štýly editovateľných ovládacích prvkov

ES_AUTOHSCROLL – Pri zadávaní textu v editovateľnom ovládacom prvku v prípade potreby sa automaticky horizontálne odroluje.

ES_AUTOVSCROLL – Pri zadávaní textu vo viacriadkovom editovateľnom ovládacom prvku sa automaticky vertikálne odroluje.

ES_CENTER – Centruje text vo viacriadkovom editovateľnom ovládacom prvku.

ES_LEFT – Zarovná text vľavo.

ES_LOWERCASE – Vynúti si, aby boli všetky znaky zadané ako malé písmená, tým, že konvertuje veľké písmená na malé.

ES_MULTILINE – Vytvára viacriadkový editovateľný ovládací prvok. Aby ste mohli používať kláves ENTER na prechod na nový riadok, použite štýl ES_WANRETURN.

ES_NOHIDESEL – Spôsobí, že výber bude zobrazený vždy, a to aj vtedy, keď editovateľný ovládací prvok stratí zvýraznenie.

ES_OEMCONVERT – Konvertuje text, zadaný do editovateľného ovládacieho prvku, zo znakovej sady Windows do znakovej sady OEM a potom späť. Tým sa zabezpečí prevod znakov pri použití funkcie CharToOem.

ES_PASSWORD – Zobrazuje namiesto jednotlivých napísaných znakov hviezdičky (*). Znak hviezdička nachádza najčastejšie uplatnenie pri zadávaní hesla. Na zmenu hesla sa používa správa EM_SETPASSWORDCHAR.

ES_READONLY – Vytvára editovateľný ovládací prvok, ktorý je určený iba na čítanie a zabraňuje používateľovi v zápise, resp. editovaní v tomto ovládacom prvku.

ES_RIGHT – Zarovnáva text vo viacriadkovom editovateľnom ovládacom prvku vpravo.

ES_UPPERCASE – Vynúti si, aby boli všetky znaky zadávané ako veľké písmená, tým, že konvertuje malé písmená na veľké.

ES_WANRETURN – Umožňuje, aby sa vo viacriadkovom editovateľnom ovládacom prvku používal kláves ENTER na prechod na nový riadok. Implicitne kláves ENTER vyberá východiskové tlačidlo v dialógovom okne a CTRL – ENTER vykonáva prechod na nový riadok.

 

Štýly zoznamov

LBS_DISABLENOSCROLL – Vynúti si, aby bol v zozname zobrazený vertikálny rolovací pruh aj vtedy, keď zoznam neobsahuje dostatočný počet položiek na rolovanie. Pokiaľ nebude dostatok položiek na rolovanie, rolovací pruh bude neaktívny. Implicitne je rolovací pruh skrytý, keď zoznam neobsahuje dostatok položiek.

LBS_EXTENDEDSEL – Umožňuje výber viacerých položiek pomocou klávesu SHIFT a myši, resp. pomocou špeciálnej kombinácie klávesov.

LBS_HASSTRINGS – Používa sa owner-drawn zoznam na určovanie reťazcov, ktoré budú do zoznamu pridané. Aplikácia potom môže použiť na vyhľadanie určitej položky správu LB_GETTEXT.

LBS_MULTICOLUMN – Vytvára viacstĺpcový zoznam, ktorý je možné horizontálne posúvať. Na nastavenie šírky stĺpcov sa používa správa LB_SETCOLUMNWIDTH.

LBS_MULTIPLESEL – Umožňuje výber viacerých položiek alebo zrušenie výberu kliknutím na jednotlivé položky.

LBS_NODATA – Používa sa owner-drawn zoznam na určovanie, že v zozname nie sú žiadne dáta. Tento štýl použijete, keď celkový počet položiek v zozname prekročí 1000. Musí byť použitý štýl LBS_OWNERDRAWNFIXED a nesmú byť použité štýly LBS_SORT a LBS_HASSTRINGS.

LBS_NOINTEGRALHEIGHT – Vynúti si, aby mal zoznam  presne určenú veľkosť. Implicitne Windows nastaví veľkosť zoznamu tak, aby nemohli byť žiadne položky zobrazené iba sčasti.

LBS_NOREDRAW – Určuje, že zoznam pri vykonávaní zmien nedostane správy WM_PAINT. Na zmenu tohto štýlu môžete použiť správu WM_SETREDRAW.

LBS_NOTIFY – Posiela oznámenie materskému oknu, keď používateľ vyberie alebo zruší výber položky v zozname.

LBS_OWNERDRAWFIXED – Vytvára owner-drawn zoznam. Rodič dostane správu WM_MEASUREITEM, keď je zoznam vytvorený, a správu WM_DRAWITEM, keď je potrebné niektorú položku vyfarbiť.

LBS_OWNERDRAWVARIALE – rovnaký ako LBS_OWNERDRAWFIXED, s výnimkou toho, že každá položka v zozname môže mať nastavenú inú veľkosť. Pre položku v zozname je zavolaná správa  WM_MEASUREITEM skôr, než pre tú istú položku je zavolaná správa WM_DRAWITEM.

LBS_SORT – Automaticky triedi reťazce, ktoré sú pridávané k zoznamu správou LD_ADDSTRING.

LBS_STANDARD – Zlučuje štýly LBS_SORT, LBS_NOTIFY a WS_BORDER.

LBS_USETABSTOPS – Pri vykresľovaní svojich reťazcov zoznam rozšíri tabulátory. Východiskovým rozmiestnením tabulátorov je 32 jednotiek dialogového okna. Na nastavenie iného rozmiestnenia tabulátorov použite správu LB_SETTABSTOPS.

LBS_WANTKEYBOARDINPUT – Vlastník zoznamu dostane správu WM_KEYTOITEM vždy, keď používateľ stlačí kláves a zoznam má zvýraznenie pre vstup. 

 

Teraz by mal nasledovať jednoduchý príklad, no z priestorových dôvodov ho nájdete na webovej stránke časopisu www.pcrevue.sk v sekcii Assembler.

 

Literatúra

[1]  Simon, R. J. – Gouker, M. – Barnes, B. C.: Win32 API. Zväzok 1, 2, 3. UNIS publishing, Brno 1997.

[2]  Richter, J.: Windows pro pokročilé a experty. Computer Press, Praha 1997.

[3]  Petzold, Ch.: Programování ve Windows – Win32 API. Computer Press, Praha 1999.


Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Ako na to

Ako zbaviť fotky hmly

08.12.2016 11:59

Hmla alebo dym sú často veľmi kreatívne nástroje. No všetkého veľa škodí. Fotka potom stráca kontrast a v podstate na nej nič nevidieť. Hmlu môžete neraz následnými úpravami odstrániť alebo zredukovať ...

Ako na to

Užitočné SW nástroje

08.12.2016 11:53

AllDup v4.0.3 Určenie: program na vyhľadávanie a odstraňovanie duplicitných súborov Vlastnosti: duplicitné súbory sa vyhľadávajú len na zvolených diskových jednotkách alebo len v rámci vybraných ...

Ako na to

Fotografovanie s bleskom

08.12.2016 11:47

Ak máte moderný fotoaparát so vstavaným alebo externým bleskom, zdá sa vám téma článku triviálna. Jednoducho nastavíte vhodný režim, vyberiete najlepšiu kompozíciu záberu, exponujete a o zvyšok sa už ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá