Image
7.6.2016 0 Comments

ASSEMBLER pod Windows: ScrollBar II + Clipboard (20. časť)

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

SetScrollInfo

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

user32.lib

user32.inc

Funkcia nastavuje parametre scrollbaru vrátane minimálnej a maximálnej pozície, veľkosti strany a súčasnej pozície. Pokiaľ je to potrebné, táto funkcia prekreslí aj scrollbar.

Syntax:  int SetScrollInfo, HWND hwnd, int fnBar, LPSCROLLINFO lpsi, BOOL fRedraw          

HWND hwnd: Handle na okno so štandardným scrollbarom alebo riadiaci prvok typu SCROLLBAR v závislosti od hodnoty parametra fnBar.

int fnBar: Typ scrollbaru, v ktorom chceme nastaviť parametre. Tento parameter môže byť jedna z nasledujúcich hodnôt:

SB_CTL – nastavuje parametre riadiaceho prvku typu scrollbar. Parameter hwnd musí byť handle na požadovaný scrollbar.

SB_HORZ – nastavuje parametre štandardného horizontálneho scrollbaru príslušného okna.

SB_VERT – nastavuje parametre štandardného vertikálneho scrollbaru príslušného okna.

LPSCROLLINFO lpsi: Ukazovateľ na štruktúru SCROLLINFO, v ktorej musia byť uložené nové parametre scrollbaru. Pred volaním funkcie SetScrollInfo aplikácia musí nastaviť položky fMask a cbsize tejto štruktúry.

Definícia štruktúry SCROLLINFO.

SCROLLINFO STRUCT

  cbSize        DWORD      ?

  fMask         DWORD      ?

  nMin          DWORD      ?

  nMax          DWORD      ?

  nPage         DWORD      ?

  nPos          DWORD      ?

  nTrackPos     DWORD      ?

SCROLLINFO ENDS

 

cbsize – veľkosť štruktúry v bajtoch.

fMask – parametre scrollbaru, ktoré chceme získať. Táto hodnota môže byť kombináciou nasledujúcich hodnôt:

SIF_DISABLENOSCROLL – zakazuje činnosť scrollbaru. Ak nové parametre scrollbaru ho činia nepotrebným, potom je možné miesto posunu jeho činnosť zakázať.

SIF_PAGE – nastavuje veľkosť strany scrollbaru podľa hodnoty nPage.

SIF_POS – nastavuje pozíciu umiestnenia ukazovateľa (thumb) scrollbaru podľa hodnoty nPos.

SIF_RANGE – nastavuje posúvací rozsah scrollbaru podľa hodnôt nMin a nMax.

nMin – minimálna pozícia scrollbaru.

nMax – maximálna pozícia scrollbaru.

nPage – veľkosť strany. Scrollbar používa túto hodnotu na určenie približnej veľkosti ukazovateľa (thumb).

nPos – pozícia umiestnenia ukazovateľa (thumb).

BOOL fRedraw: Určuje, či v nadväznosti na nové parametre sa má scrollbar prekresliť. Pokiaľ je tento parameter TRUE, je scrollbar prekreslený, inak nie.

Výsledok funkcie: int: Vráti súčasnú pozíciu nastavenia scrollbaru.

 

SetScrollPos

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

user32.lib

user32.inc

Funkcia nastaví súčasnú pozíciu ukazovateľa (thumb) na danom scrollbare, a ak je to pre nové hodnoty potrebné, scrollbar sa prekreslí. Táto funkcia sa obyčajne používa na nastavenie súčasnej pozície scrollbaru v prípade, že ten bol predtým vytvorený, resp. zobrazený a je potrebné jeho nastavenie uviesť do súladu s novou hodnotou. Takým prípadom môže byť programovanie obsluhy scrollbaru z klávesnice. Táto funkcia bola zaradená pre zabezpečenie kompatibility s Windows NT 3.5 a predchádzajúcimi verziami Windows. Pri programovaní aplikácií pre Windows 95 používajte funkciu SetScrollInfo.

Syntax:  int SetScrollPos, HWND hWnd, int nBar, int nPos, BOOL bRedraw    

HWND hWnd: Handle na okno so štandardným scrollbarom, resp. riadiaci prvok typu SCROLLBAR v závislosti od hodnoty parametra nBar.

int nBar: Scrollbar, ktorý sa má nastaviť. Tento parameter môže byť jedna z nasledujúcich hodnôt:

SB_CTL – nastavuje parametre riadiaceho prvku typu scrollbar. Parameter hwnd musí byť handle na požadovaný scrollbar.

SB_HORZ – nastavuje parametre štandardného horizontálneho scrollbaru príslušného okna.

SB_VERT – nastavuje parametre štandardného vertikálneho scrollbaru príslušného okna.

int nPos: Nová aktuálna pozícia nastavenia. Táto pozícia musí byť v medziach určených funkciou SetScrollRange.

BOOL bRedraw: Určuje, či v nadväznosti na nové parametre sa má scrollbar prekresliť. Pokiaľ je tento parameter TRUE, je scrollbar prekreslený, inak nie.

Výsledok funkcie: int: V prípade úspešného vykonania funkcie je návratovou hodnotou predchádzajúca pozícia ukazovateľa scrollbaru. V ostatných prípadoch sa vráti nula.

 

SetScrollRange

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

user32.lib

user32.inc

Funkcia SetScrollRange nastavuje minimálnu a maximálnu pozíciu daného scrollbaru. Funkciu SetScrollRange použijete, keď je scrollbar vytvorený, na nastavenie horného a dolného limitu posuvu.  Funkciu tiež môžete použiť na zobrazenie alebo skrytie štandardného scrollbaru. Pokiaľ teda chcete skryť scrollbar, potom nastavte nMinPos a nMaxPos na nulu. Táto funkcia bola zaradená pre zabezpečenie kompatibility s Windows NT 3.5 a predchádzajúcimi verziami Windows. Pri programovaní aplikácií pre Windows 95 používajte funkciu SetScrollInfo.

Syntax:  BOOL SetScrollRange, HWND hWnd, int nBar, int nMinPos, int nMaxPos, BOOL bRedr

HWND hWnd: Handle na okno so štandardným scrollbarom, resp. riadiaci prvok typu SCROLLBAR v závislosti od hodnoty parametra nBar.

int nBar: Scrollbar, ktorý sa má nastaviť. Tento parameter môže byť jedna z nasledujúcich hodnôt:

SB_CTL – nastavuje rozmedzie pozícií riadiaceho prvku typu scrollbar. Parameter hwnd musí byť handle na požadovaný scrollbar.

SB_HORZ – nastavuje rozmedzie pozícií štandardného horizontálneho scrollbaru príslušného okna.

SB_VERT – nastavuje rozmedzie pozícií štandardného vertikálneho scrollbaru príslušného okna

int nMinPos: Minimálna pozícia.

int nMaxPos: Maximálna pozícia.

BOOL bRedr: Určuje, či v nadväznosti na nové parametre sa má scrollbar prekresliť. Pokiaľ je tento parameter TRUE, je scrollbar prekreslený, inak nie.

Výsledok funkcie: BOOL: Ak sa funkcia skončila úspešne, je vrátená návratová hodnota TRUE, v opačnom prípade je vrátená hodnota FALSE.

 

ShowScrollBar

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

user32.lib

user32.inc

Funkcia sa používa na zobrazenie, resp. skrytie scrollbaru. Táto funkcia sa používa pri počiatočnom vytváraní scrollbaru alebo neskôr, pri jeho skrytí či znovuzobrazení. Funkciu však nevolajte počas obsluhy správy scrollbaru.

Syntax:  BOOL ShowScrollBar, HWND hWnd, int wBar, BOOL bShow

HWND hWnd: Handle na okno so štandardným scrollbarom, resp. riadiaci prvok typu SCROLLBAR v závislosti od hodnoty parametra nBar.

int nBar: Scrollbar, ktorý sa má zobraziť, resp. skryť. Tento parameter môže byť jedna z nasledujúcich hodnôt:

SB_BOTH – zobrazí alebo skryje horizontálny aj vertikálny scrollbar spojený s príslušným oknom.

SB_CTL – zobrazí alebo skryje riadiaci prvok typu scrollbar. Parameter hwnd musí byť handle na požadovaný scrollbar.

SB_HORZ – zobrazí alebo skryje štandardný horizontálny scrollbar príslušného okna.

SB_VERT – zobrazí alebo skryje štandardný vertikálny scrollbar príslušného okna.

BOOL bShow: Určuje, či scrollbar bude zobrazený, resp. skrytý. Pokiaľ je tento parameter TRUE, je scrollbar zobrazený, inak je skrytý.

Výsledok funkcie: BOOL: Ak sa funkcia skončila úspešne, je vrátená návratová hodnota TRUE, v ostatných prípadoch je vrátená hodnota FALSE.

Opis scrollbaru zakončíme komplexným príkladom, ktorý som nazval jednoducho HTML Color Mixer. Programom si môžete namiešať ľubovoľnú RGB farbu, pričom program vám vygeneruje color kód, ktorý môžete využiť pri písaní stránky HTML. Samozrejme, zdrojový kód nájdete na stránke www.pcrevue.sk v sekcii Programujeme – Assembler pod Windows. Pretože v programe som použil niekoľko funkcií na prácu so schránkou Windows, nasleduje ich opis.

 

ClipBoard

GlobalAlloc

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

kernel32.lib

kernel32.inc

Funkcia GlobalAlloc pridelí blok pamäte z haldy (heap). Pri lineárnom usporiadaní pamäte prostredia Win32 neexistuje rozdiel medzi lokálnou a globálnou haldou.

Syntax:  HGLOBAL GlobalAlloc, UINT uFlags, DWORD dwBytes

UINT uFlags: Určuje spôsob pridelenia pamäte. Ak má tento parameter nulovú hodnotu, implicitne sa použije hodnota GMEM_FIXED. Tento parameter je možné zadať ako kombináciu nasledujúcich:

GMEM_FIXED – prideľuje pevne umiestnenú pamäť. Nemožno ho kombinovať s príznakmi GMEM_MOVEABLE a GMEM_DISCARDABLE. Vráti ukazovateľ na pamäťový blok. Pri prístupe k pamäti pretypuje túto návratovú hodnotu na ukazovateľ.

GMEM_MOVEABLE – prideľuje pamäť, ktorú možno presunúť. Nemožno ho kombinovať s príznakom GMEM_FIXED. Vráti handle pamäťového objektu. Handle je 32-bitová privátna hodnota volajúceho procesu. Na preklad handle na ukazovateľ sa používa funkcia GlobalLock.

GPTR – je kombináciou príznakov GMEM_FIXED a GMEM_ZEROINT.

GHND – je kombináciou príznakov GMEM_MOVEABLE a GMEM_ZEROINT.

GMEM_DDESHARE – prideľuje pamäť, ktorá má byť využitá funkciami dynamického zdieľania dát (DDE) na DDE konverzáciu. Vo Windows 3.x je táto pamäť zdieľaná globálne. Vo Win32 to tak nie je. Tento príznak je tu zaradený pre kompatibilitu. Niektoré aplikácie to môžu využívať na zvýšenie výkonu operácií DDE, potom je však potrebné uviesť, že sa pamäť využíva na účely DDE.

GMEM_DISCARDABLE – prideľuje pamäť, ktorú možno odstrániť. Nemožno ho kombinovať s príznakom GMEM_FIXED. Niektoré aplikácie prostredia Win32 ho môžu ignorovať.

GMEM_NOCOMPACT – zabezpečí, že sa na uspokojenie alokačných požiadaviek nevykoná zhostenie alebo odstránenie pamäte.

GMEM_NODISCARD – zabezpečí, že sa na uspokojenie alokačných požiadaviek nevykoná odstránenie pamäte.

GMEM_SHARE – má rovnaký význam ako GMEM_DDESHARE.

GMEM_ZEROINT – zabezpečí inicializáciu obsahu pamäťového bloku nulami.

DWORD dwBytes: Určuje počet prideľovaných bajtov.

Výsledok funkcie: HGLOBAL: Ak sa funkcia skončila úspešne, je vrátený handle na pridelený pamäťový blok, v ostatných prípadoch je vrátená hodnota NULL.

 

GlobalLock

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

kernel32.lib

kernel32.inc

Funkcia uzamyká globálny pamäťový objekt, vráti ukazovateľ na prvý bajt tohto pamäťového objektu. Uzamknutý blok sa nemôže presúvať ani odstraňovať. Pri objektoch prideľovaných s príznakom GMEM_MOVEABLE funkcia zväčšuje počítadlo zámkov, spojené s týmto pamäťovým objektom. Použite funkciu GlobalLock na získanie ukazovateľa na globálny pamäťový objekt pridelený funkciou GlobalAlloc s príznakom GMEM_MOVEABLE. Ukazovateľ zostáva platný, pokiaľ blok nie je odomknutý pomocou funkcie GlobalUnlock.

Syntax:  LPVOID GlobalLock,  HGLOBAL hMem

HGLOBAL hMem: Handle globálneho pamäťového objektu vrátený funkciou GlobalAlloc.

Výsledok funkcie: LPVOID: Ak sa funkcia skončila úspešne, je vrátený handle na prvý bajt príslušného pamäťového bloku, v ostatných prípadoch je vrátená hodnota NULL.

 

GlobalUnlock

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

kernel32.lib

kernel32.inc

Funkcia GlobalUnlock odomyká globálny pamäťový objekt. Pri každom volaní funkcie GlobalUnlock sa znižuje počítadlo zámkov pamäťového bloku, ktorý bol pridelený s príznakom GMEM_MOVEABLE. GlobalUnlock nemá žiadny efekt na pamäťový objekt pridelený s príznakom GMEM_FIXED. Prv ako Windows môže presunúť alebo odstrániť pamäť, je potrebné, aby GlobalUnlock bol zavolaný toľkokrát, koľkokrát bola volaná funkcia GlobalLock.

Syntax:  BOOL GlobalUnlock, HGLOBAL hMem

HGLOBAL hMem: Handle na globálny pamäťový objekt, ktorý bol získaný pomocou funkcie GlobalAlloc.

Výsledok funkcie: BOOL: V prípade, že je objekt po znížení počítadla aj naďalej zamknutý, návratovou hodnotou je TRUE, v ostatných prípadoch je vrátená hodnota FALSE.

 

CloseClipboard

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

user32.lib

user32.inc

Funkcia zatvorí schránku pre čítanie aj zápis (jej obsahu). CloseClipboard vráti riadenie dát schránke Windows. Riadenie by nemalo byť odovzdané Windows, pokiaľ je schránka otvorená. Je potrebné otvoriť a zatvoriť schránku v priebehu spracovania jednej správy Windows. Funkcia nemá žiadne parametre.

Syntax:  BOOL CloseClipboard

Výsledok funkcie: BOOL: Návratová hodnota je TRUE, pokiaľ bola schránka vyprázdnená, a FALSE v prípade chyby. V prípade chyby môžete použiť funkciu GetLastError na získanie kódu chyby.

 

OpenClipboard

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

user32.lib

user32.inc

Funkcia otvorí schránku pre čítanie a zápis jej obsahu. Schránka musí byť otvorená prv, než sa použije funkcia SetClipboard na nastavenie obsahu. Schránka zostáva otvorená, pokiaľ nie je zavolaná funkcia CloseClipboard. Odporúčanie: Aplikácia by nemala nechať schránku otvorenú, keď vracia riadenie Windows. To znamená, že schránka musí byť otvorená a uzatvorená v priebehu spracovania jednej správy Windows.

Syntax:  BOOL OpenClipboard, HWND hWndNewOwner

HWND hWndNewOwner: Handle okna, ktoré otvára schránku.

Výsledok funkcie: BOOL: Návratová hodnota je TRUE, pokiaľ je schránka otvorená,  a FALSE v prípade chyby. Funkciu GetLastError môžete použiť na získanie kódu chyby.

 

SetClipboardData

Windows NT

Win 95

Win32s

Lib

Include

Áno

Áno

Áno

user32.lib

user32.inc

Funkcia SetClipboardData umiestni dáta do schránky pre daný typ schránky. Toto je iba spôsob nastavenia obsahu schránky. Skôr ako aplikácia umiestni dáta do schránky, musí byť schránka otvorená pomocou funkcie OpenClipboard a všetky formáty musia byť uvoľnené volaním funkcie EmptyClipboard. Po nastavení dát volajte bezprostredne funkciu CloseClipboard.

Syntax:  HANDLE SetClipboardData, UINT uFormat, HANDLE hMem   

UINT uFormat: Určuje, aký typ dát sa nachádza v pamäťovom bloku, na ktorý ukazuje hMem. Typ dát môže byť niektorý z nasledujúcich hodnôt alebo registrovaný formát schránky.

CF_BITMAP [typ:HBITMAP] – handle na bitovú mapu.

CF_DIB [typ:HANDLE] – pamäťový objekt obsahujúci štruktúru BITMAPINFO, nasledovaný bitmi bitovej mapy.

CF_DIF [typ:HANDLE] – Software Arts Data Interchange Format. Prirodzený formát VisiCalc, ktorý bol prijatý ako všeobecný formát výmeny dát.

CF_DSPBITMAP [typ:HBITMAP] – bitová mapa, ktorá je privátna pre aplikáciu. Môže byť použitá napríklad na testovanie dát medzi rozdielnymi inštanciami tej istej aplikácie. Použite funkciu GetClipboardOwner na určenie vlastníka schránky.

CF_DSPENHMETAFILE [typ:HENMETAFILE] – rozšírený metasúbor, ktorý je privátny pre aplikáciu.

CF_DSPMETAFILEPICT [typ:HANDLE] – pamäťový objekt obsahujúci štruktúru METAFILEPICT, ktorá je privátna pre aplikáciu.

CF_DSPTEXT [typ:HANDLE] – text, ktorý je privátny pre aplikáciu.

CF_ENHMETAFILE [typ:HENMETAFILE] – rozšírený metasúbor.

CF_GDIOBJFIRST, CF_GDIOBJLAST [typ:HGDOBJ] – aplikáciou definované formáty schránky, ktoré sú reprezentované objektmi GDI. Funkcia DeleteObject je použitá na odstránenie dát v tomto formáte, keď je volaná funkcia EmptyClipboard.

CF_HDROP [typ:HDROP] – listing súborov použitý pre operáciu ťahaj a pusti (drag  and  drop). Pre získanie mien súborov použite funkciu DragQueryDropFileInfo.

CF_LOCALE [typ:LCID] – lokálne použitie na uchovanie textových dát. Win32 majú vstavanú národnú jazykovú podporu. V dôsledku toho je pri prenose dát do schránky príznak CF_LOCALE nastavený takisto na lokálne použitie cesty spracovania správ. Aplikácia môže zmeniť lokálne použitie pomocou funkcie SetThreadLocale.

CF_METAFILEPICT [typ:HANDLE] – pamäťový objekt obsahujúci štruktúru METAFILEPICT.

CF_OEMTEXT [typ:HANDLE] – pamäťový objekt obsahujúci nulou zakončený reťazec znakov v OEM množine znakov. Riadky sú oddelené pomocou návratu vozíka a posunu o riadok (CR/LF).

CF_OWNERDISPLAY [typ:NULL] – indikuje, že vlastník schránky bude zodpovedný za zobrazenie dát, a aktualizuje prehliadač schránky. Prehliadač schránky zašle vlastníkovi schránky správy WM_ASKCBFORMATNAME, WM_HPAINTCLIPBOARD, WM_HSCROLLCLIPBOARD, WM_SIZECLIPBOARD a WM_VSCROLLCLIPBOARD.

CF_PALETTE [typ:HPALETTE] – farebná paleta objektu GDI. Typicky sa tento formát používa vtedy, keď dáta umiestnené v schránke požadujú na zobrazenie neštandardnú paletu. Každý prehliadač by sa mal „opýtať“ na formát schránky prv, než zobrazí grafické dáta ako bitové mapy.

CF_PENDATA [typ:HPENDATA] – dáta pre príponu *.pen pod operačným systémom Windows.

CF_PRIVATEFIRST, CF_PRIVATELAST – tento rozsah označí privátne formáty schránky. Windows tieto formáty schránky nespravuje. Vlastník schránky musí spracovať prostriedky použitím správy WM_DESTROYCLIPBOARD.

CF_SYLK [typ:HANDLE] – formát Microsoft Symbolic Link (SYLK.).

CF_RIFF [typ:HANDLE] – komplexná zvuková podpora. Je komplexnejšia než CF_WAVE.

CF_TEXT [typ:HANDLE] – pamäťový objekt obsahujúci reťazec znakov zakončený nulou. Riadky sú oddelené pomocou návratu vozíka  a posunu o riadok (CR/LF).

CF_TIFF [typ:HANDLE] – obrazový formát súboru.

CF_UNICODETEXT [typ:HANDLE] – pamäťový objekt obsahujúci reťazec zakončený nulou v multibajtovom (Unicode) globálnom znakovom kódovanom formáte.

CF_WAVE [typ:HANDLE] – podpora štandardných wave zvukových súborov.

HANDLE hMem: Handle globálneho pamäťového bloku, ktorý obsahuje dáta v špecifikovanom formáte. Ak nastavíte tento parameter na NULL, dáta nemusia byť uložené do schránky, pokiaľ sa neprijme správa WM_RENDERFORMAT.

Výsledok funkcie: HANDLE: Pokiaľ sa funkcia skončí úspešne, je vrátený handle na dáta, v opačnom prípade je vrátená hodnota NULL. Na zistenie rozšírenej informácie o chybe použite funkciu GetLastError.

 

.data

buf8 db "#",48,48,48,48,48,48,0,13,10

...

LOCAL hGlobal : DWORD, pGlobal

...

invoke GlobalAlloc,GHND + GMEM_SHARE,10

mov hGlobal,eax

invoke GlobalLock,hGlobal

mov pGlobal,eax

invoke lstrcpy,pGlobal,addr buf8

invoke GlobalUnlock,hGlobal

invoke OpenClipboard,hWnd

invoke EmptyClipboard

invoke SetClipboardData,CF_TEXT,hGlobal

invoke CloseClipboard

...

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.: Programovaní 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

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

Ako na to 2

Tipy a triky: Ako vypnúť uzamykaciu obrazovku vo Windows 10?

29.11.2016 00:10

Rozčuľuje vás, že pred každým prihlásením doúčtu vášho počítača musíte prejsť uzamykacou obrazovkou? Windows 10 na tejto obrazovke ukazuje čas,dátum anejakú zaujímavú fotografiu zrôznych kútov sveta. ...

Žiadne komentáre

Vyhľadávanie

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

Najnovšie videá