Image
7.6.2016 0 Comments

ASSEMBLER pod Windows: Menu II. (15. časť)

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

Novinky zo sveta Assemblera

· Bol uvoľnený prekladač MASM32 verzie 7. Môžete ho získať na adrese http://www.movsd.com/. Okrem nových príkladov obsahuje dva nové nástroje: Object Creator 1.6 a VkDebug (debugging macros) a, samozrejme, aktualizuje a rozširuje nástroje z predchádzajúcich verzií.

 

InsertMenu

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

user32.lib

user32.inc

 

Funkcia sa používa na pridanie novej položky do menu, pričom ostatné položky sa posunú smerom dolu. Výhoda oproti funkcii AppendMenu je v tom, že funkcia umožňuje pridať položku na ľubovoľné miesto v menu.

Syntax: BOOL InsertMenu, HMENU hMenu, UINT uPosition, UINT uFlags, UINT uIDNewItem,     LPCTSTR lpNewItem

HMENU hMenu: Handle menu, ku ktorému sa pridá nová položka.

UINT uPosition: Identifikátor alebo pozícia položky menu, pred ktorú bude vložená nová položka. Parameter uFlags bude obsahovať hodnoty MF_BYCOMMAND a MF_BYPOSITION. Pri MF_BYCOMMAND je hodnota uPosition ID položky menu a pri MF_BYPOSITION je uPosition offset položky menu, vzťahujúci sa k nule.

UINT uFlags: Určuje, ako bude interpretovaný parameter uPosition. Takisto nastavuje stav novej položky menu. Môžete použiť hodnoty z PC REVUE č. 2/2002 (tabuľka 1) a okrem toho hodnoty MF_BYPOSITION a MF_BYCOMMAND.

UINT uIDNewItem: Hodnota ID položky menu, ak uFlags je nastavený na MF_POPUP, potom uIDNewItem je handle nového podmenu, resp. submenu.

LPCTSTR lpNewItem: Obsah novej položky menu. Hodnota závisí od parametra uFlags.

Výsledok funkcie: BOOL: Po úspešnom vykonaní funkcie sa vráti hodnota TRUE, inak FALSE.


IsMenu

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

user32.lib

user32.inc

Funkcia zistí, či handle je handle menu.

Syntax: BOOL IsMenu, HMENU hMenu

HMENU hMenu: Handle, ktorý chceme testovať.

Výsledok funkcie: BOOL: Ak hMenu je handle menu, vráti sa hodnota TRUE, v opačnom prípade sa vráti hodnota FALSE.

 

ModifyMenu

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

user32.lib

user32.inc

 

Funkcia umožňuje zmeniť existujúcu položku menu dynamicky, t. j. počas behu aplikácie.

Syntax: BOOL ModifyMenu, HMENU hMenu, UINT uPosition, UINT uFlags, UINT uIDNewItem,   LPCTSTR lpNewItem

HMENU hMenu: Handle menu.

UINT uPosition: Identifikátor alebo pozícia položky menu, ktorá sa bude meniť. Parameter uFlags bude obsahovať hodnoty MF_BYCOMMAND a MF_BYPOSITION. Pri MF_BYCOMMAND je hodnota uPosition ID položky menu a pri MF_BYPOSITION je uPosition offset položky menu, vzťahujúci sa k nule.

UINT uFlags: Určuje, ako bude interpretovaný parameter uPosition. Môžete použiť hodnoty z PC REVUE č. 2/2002 (tabuľka 2) a okrem toho hodnoty MF_BYPOSITION a MF_BYCOMMAND.

UINT uIDNewItem: Hodnota ID položky menu, ak uFlags je nastavený na MF_POPUP, potom uIDNewItem je handle nového podmenu, resp. submenu.

LPCTSTR lpNewItem: Nový obsah pre položku menu. Hodnota závisí od parametra uFlags. Pre uFlags môžete použiť nasledujúce hodnoty: MF_STRING – zobrazuje položku menu s použitím textového reťazca. Parameter lpNewItem je ukazovateľ na reťazec zakončený nulou, MF_BITMAP – zobrazuje položku menu s použitím bitovej mapy, parameter lpNewItem obsahuje handle bitovej mapy, MF_OWNERDRAW – pridáva k menu položku typu owner-draw. Okno dostane správu WM_MEASUREITEM skôr, ako je menu po prvýkrát zobrazené, a správu WM_DRAWITEM vždy, keď musí byť vzhľad položky menu aktualizovaný.

Výsledok funkcie: BOOL: Po úspešnom vykonaní funkcie sa vráti hodnota TRUE, inak FALSE.

 

RemoveMenu

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

user32.lib

user32.inc

Funkcia odstráni položku z menu. Ak je touto položkou podmenu, resp. submenu, je odstránené, nie však zlikvidované. Podmenu, resp. submenu odstránené týmto spôsobom môže byť znovu použité. Pred ukončením aplikácie musíte všetky menu, ktoré nie sú pripojené k hlavnému menu, odstrániť funkciou DestroyMenu. Pred použitím funkcie RemoveMenu použite funkciu GetSubMenu na získanie handle na podmenu, resp. submenu.

Syntax: BOOL RemoveMenu, HMENU hMenu, UINT uPosition, UINT uFlags

HMENU hMenu: Handle menu.

UINT uPosition: Identifikátor alebo pozícia položky menu, ktorá sa má odstrániť. Parameter uFlags bude obsahovať hodnoty MF_BYCOMMAND a MF_BYPOSITION. Pri MF_BYCOMMAND je hodnota uPosition ID položky menu a pri MF_BYPOSITION je uPosition offset položky menu, vzťahujúci sa k nule.

UINT uFlags: Určuje, ako bude interpretovaný parameter uPosition. Môžete použiť hodnoty MF_BYPOSITION a MF_BYCOMMAND.

Výsledok funkcie: BOOL: Po úspešnom vykonaní funkcie sa vráti hodnota TRUE, inak FALSE.

 

SetMenu

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

user32.lib

user32.inc

Funkcia pripojí nové menu k špecifikovanému oknu. Menu môže byť definované buď v resource súbore, alebo je dynamicky vytvorené aplikáciou. Existujúce menu je odstránené.

Syntax: BOOL SetMenu, HWND hWnd, HMENU hMenu

HWND hWnd: Handle okna, ktorého menu budeme meniť.

HMENU hMenu: Handle na nové menu. Ak tento parameter bude NULL, aktuálne menu bude odstránené.

Výsledok funkcie: BOOL: V prípade, že sa podarí zmeniť menu, je vrátená hodnota TRUE, inak FALSE.

 

SetMenuDefaultItem

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Nie

user32.lib

user32.inc

 

Funkcia nastaví východiskovú položku pre špecifikované menu. Východisková položka vyzerá inak než ostatné a vyberá sa dvojitým kliknutím na položku materského menu (pozri obrázok 2).

Syntax: BOOL SetMenuDefaultItem, HMENU hMenu, UINT uItem, UINT fByPos

HMENU hMenu: Handle menu na nastavenie default položky.

UINT uItem: Identifikátor menu alebo pozícia položky menu, ktorá sa má nastaviť ako východisková položka. V prípade, že nechcete žiadnu východiskovú položku, nastavte tento parameter na –1.

UINT fByPos: Špecifikuje význam parametra uItem. Ak je tento parameter FALSE, je uItem identifikátorom položky menu, inak to je pozícia položky menu.

Výsledok funkcie: BOOL: Po úspešnom vykonaní funkcie sa vráti hodnota TRUE, inak FALSE.

 

SetMenuItemBitmaps

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

user32.lib

user32.inc

Funkcia spojí špecifikovanú bitovú mapu s položkou menu. Len čo je položke menu priradená nová bitová mapa, funkcia CheckMenuItem bude túto bitovú mapu používať pri zaškrtnutí alebo pri zrušení zaškrtnutia položky menu. Keďže veľkosť bitových máp závisí od aktuálneho rozlíšenia, musíte použiť funkciu GetMenuCheckMarkDimensions na prispôsobenie veľkosti bitovej mapy.

Syntax: BOOL SetMenuItemBitmaps, HMENU hMenu, UINT uPosition, UINT uFlags, HBITMAP hBitmapUnchecked, HBITMAP hBitmapChecked

HMENU hMenu: Handle menu.

UINT uPosition: Identifikátor alebo pozícia položky menu, ktorá sa bude meniť. Parameter uFlags bude obsahovať hodnoty MF_BYCOMMAND a MF_BYPOSITION. Pri MF_BYCOMMAND je hodnota uPosition ID položky menu a pri MF_BYPOSITION je uPosition offset položky menu, vzťahujúci sa k nule.

UINT uFlags: Určuje, ako bude interpretovaný parameter uPosition. Môžete použiť hodnoty MF_BYPOSITION a MF_BYCOMMAND.

HBITMAP hBitmapUnchecked: Handle bitovej mapy, ktorá sa má zobraziť, keď položka menu nie je zaškrtnutá. Ak je tento parameter NULL, oblasť značky zaškrtnutia je ponechaná prázdna, keď položka nie je zaškrtnutá.

HBITMAP hBitmapChecked: Handle bitovej mapy, ktorá sa má zobraziť, keď je položka menu zaškrtnutá.

Výsledok funkcie: BOOL: Po úspešnom vykonaní funkcie sa vráti hodnota TRUE, inak FALSE.

 

TrackPopupMenu

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

user32.lib

user32.inc

 

Funkcia zobrazí popup menu na ľubovoľnom mieste obrazovky (pozri obrázok 1). Popup menu zmizne, len čo ste vybrali položku menu alebo klikli mimo oblasti menu. Menu sa obyčajne zobrazuje po stlačení pravého tlačidla myši.

Syntax: BOOL TrackPopupMenu, HMENU hMenu, UINT uFlags, int x, int y, int nReserved, HWND hWnd, CONST RECT *prcRect

HMENU hMenu: Handle menu. Popup menu vytvoríte pomocou funkcie CreatePopupMenu alebo použitím funkcie GetSubMenu.

UINT uFlags: Špecifikuje polohu popup menu.Tento parameter môže byť NULL alebo hodnoty z tabuľky 1.

int x: Horizontálna poloha popup menu v súradniciach obrazovky.

int y: Vertikálna poloha popup menu v súradniciach obrazovky.

 int nReserved: Rezervované, parameter musí byť nula.

HWND hWnd: Handle k oknu, ktorému popup menu patrí. Toto okno potom prijíma z popup menu všetky správy.

CONST RECT *prcRect: Ukazovateľ na štruktúru RECT, ktorá špecifikuje časť obrazovky, v ktorej môže používateľ vyberať, pričom menu sa neukončí. Ak je tento parameter NULL, popup menu sa ukončí, keď používateľ klikne mimo popup menu.

Výsledok funkcie: BOOL: Po úspešnom vykonaní funkcie sa vráti hodnota TRUE, inak FALSE.

 

Tabuľka 1  Typy príznakov uFlags pre funkciu TrackPopupMenu

Hodnota

Význam

TPM_BOTTOMALIGN

Zarovnáva spodnú časť menu so súradnicou danou parametrom y.

TPM_CENTERALIGN

Zarovnáva menu horizontálne na stred podľa súradnice x.

TPM_LEFTALIGN

Zarovnáva ľavú stranu menu so súradnicou danou parametrom x.

TPM_LEFTBUTTON

Sleduje ľavé tlačidlo myši.

TPM_RETURNCMD

Namiesto odoslania správy WM_COMMAND vráti identifikátor zvolenej položky menu. Pokiaľ dôjde k chybe alebo nie je vybraná žiadna položka menu, návratová hodnota je nula, ak dôjde k chybe vo vyhodnocovacej vrstve, návratová hodnota je –1. Z toho dôvodu ako identifikátory položiek menu nepoužívajte hodnoty 0 a –1.

TPM_RIGHTALIGN

Zarovnáva pravú stranu menu so súradnicou danou parametrom x.

TPM_RIGHTBUTTON

Sleduje pravé tlačidlo myši.

TPM_TOPALIGN

Zarovnáva hornú časť menu so súradnicou danou parametrom y.

TPM_VCENTERALIGN

Zarovnáva menu vertikálne na stred podľa súradnice danej parametrom y.

Pre funkciu  TrackPopupMenuEx

TPM_HORIZONTAL

Ak nie je možné zobraziť menu v danom umiestnení bez prekrytia vylúčeného pravouholníka, požadované horizontálne zarovnanie má prednosť pred vertikálnym zarovnaním.

TPM_VERTICAL

Ak nie je možné zobraziť menu v danom umiestnení bez prekrytia vylúčeného pravouholníka, požadované vertikálne zarovnanie má prednosť pred horizontálnym zarovnaním.

 

TrackPopupMenuEx

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Nie

user32.lib

user32.inc

 

Funkcia sa podobá TrackPopupMenu, s tým rozdielom, že aplikácia môže špecifikovať pravouhlú oblasť obrazovky, ktorú menu nebude prekrývať. Túto funkciu využijete tam, kde nechcete, aby bolo niečo dôležité zakryté zobrazením popup menu.

Syntax: BOOL TrackPopupMenuEx, HMENU hmenu, UINT fuFlags, int x, int y, HWND hwnd,     LPTPMPARAMS lptpm

HMENU hmenu: Handle menu.

UINT fuFlags: Špecifikuje polohu popup menu.Tento parameter môže byť NULL alebo hodnoty z tabuľky 1.

int x: Horizontálna poloha popup menu v súradniciach obrazovky.

int y: Vertikálna poloha popup menu v súradniciach obrazovky.

HWND hwnd: Handle k oknu, ktorému popup menu patrí. Toto okno potom prijíma z popup menu všetky správy.

LPTPMPARAMS lptpm: Ukazovateľ na štruktúru TPMPARAMS, ktorý určuje časť obrazovky, ktorú by nemalo menu prekrývať. Tento parameter môže byť NULL. Štruktúra má tvar:

typedef struct tagTPMPARAMS { 

    UINT cbSize; Veľkosť štruktúry v bajtoch.

    RECT rcExclude; Oblasť obrazovky, ktorá sa nemá prekrývať.

} TPMPARAMS, FAR *LPTPMPARAMS;

Výsledok funkcie: BOOL: Po úspešnom vykonaní funkcie sa vráti hodnota TRUE, inak FALSE.

Použitie uvedených funkcií nájdete v príklade na stránke www.pcrevue.sk v sekcii Programujeme – Assembler pod Windows.

 

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 funguje sandbox?

08.12.2016 15:36

Každá aplikácia môže pre operačný systém počítača či mobilného zariadenia predstavovať potenciálnu hrozbu, a to aj v prípade, ak neobsahuje žiadne bloky škodlivého kódu. Murphyho zákony neúprosne defi ...

Ako na to

Tipy a triky: Ako na snímku obrazovky na akomkoľvek počítači s Windows?

02.12.2016 00:13

Ak snímky obrazovky robíte často apotrebujete napríklad funkcie na posun stránok alebo snímanie zobrazenia pri vyššom rozlíšení displeja, zrejme používate nejakú špecializovanú aplikáciu. Väčšina použ ...

Ako na to 1

Tipy a triky: Ako aplikácii prednastaviť spúšťanie s administrátorskými právami?

30.11.2016 00:10

Väčšina aspoň trochu skúsenejších používateľov vie, že aj keď máte na operačnom systéme Windows vytvorený administrátorský účet, aplikácie pre bezpečnosť nefungujú vždy splnými administrátorskými práv ...

Žiadne komentáre

Vyhľadávanie

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

Najnovšie videá