13 - Princípy grafických užívateľských rozhraní
je souhrn způsobů, jakými lidé (uživatelé) ovlivňují chování strojů, zařízení, počítačových programů či komplexních systémů
Uživatelské rozhraní počítače zpracovává:
vstupy od uživatele, kterými se prostředí ovládá
výstupy, které prezentují výsledky uživatelových vstupů
Typy rozhraní:
grafické uživatelské rozhraní – nejrozšířenější rozhraní pro desktop
textové uživatelské rozhraní – s menu, tlačítky, ovládání klávesnicí a myší
příkazový řádek – příkazy se zadávají zápisem pomocí klávesnice
braillský řádek – zařízení pro převod textu do slepeckého písma
…
Komunikačné kanály
Obraz - vysoká priepustnosť, „náhodný prístup“, len smer počítač → človek
Zvuk - nižšia priepustnosť, „sériový prístup“, neodvádza pozornosť zraku, dôležitá upozorňovacia funkcia (keď som v kancelárii tak poplach počujem, ale keby mi len začala blikať nejaká kontrolka tak si to nemusím všimnúť), komunikácia oboma smermi
Hmat - v súčastnosti používaný na komunikáciu človek → počítač (ale existujú výnimky - zariadenia pre slepých, herné zariadenia)
čuch, chuť - v súčastnosti nepoužiteľné
elektrické signály - voperovať niečo do človeka a komunikovať priamo pomocou signálov - momentálne experimentálne, ale spoločensky neprijateľné
Periférne zariadenia
Obraz
tlačiareň - vyrába trvalé kópie dokumentov z počítača
displej - „obyčajné displeje“ - statický obsah, napr. zobrazí dialógový box, môžme tam písať, ale kým niečo nepíšeme tak sa nič nedeje
videosystém - zariadenia, ktoré zobrazia minimálne 6 obrazov za sekundu v dostatočnom rozlíšení (napr. prehrávané video) - typicky PC
systém virtuálnej reality - sú schopné generovať niekoľko obrazov za sekundu z popisu scény a zobraziť ich - väčšina moderných PC
systémy na získavanie a spracovanie obrazu
Zvuk
záznam zvuku - pomocou vzorkovania, rôzna kvalita systémov
reprodukcia zvuku - reprodukujú zvuk zaznamenanými
rozpoznávanie reči - rozpoznajú význam zvuku a reči - zatiaľ technicky nezvládnuté
generovanie zvuku - dokážu generovať zvuk, môžu byť špecializované (hudba, reč)
Hmat
klávesnica - najobvyklejšie zariadenie na predávanie informácie človekom do počítača
myš - zariadenie na grafickú komunikáciu v 2D súradniciach
zariadenia pre záznam kresby a rozpoznávanie - touchpad, touchscreen, multitouch display
Popis užívateľského rozhrania programovacími jazykmi
textovo priamo - tradičná a veľmi neefektívna cesta (napíšeme program v ktorom sú priamo natvrdo zakódované prvky UI)
textovo rámcovo - používa sa dosť výnimočne (Tcl/Tk), len popíšeme čo má rozhranie obsahovať, ale nie presné rozmiestnenie prvkov - výhodou je, že funguje na všetkých platformách, nevýhodou je, že nevieme ako presne to rozhranie bude vyzerať (keď potrebujeme vedieť počet pixelov)
WYSIWYG - naklikáme si UI pomocou nejakých prefabrikovaných prvkov, nevýhodou je, že bude s najväčšou pravdepodobnosťou fungovať len na 1 platforme (nedá sa preniesť 1:1, lebo na inej platforme by to vyzeralo divno)
Udalosťami riadený systém
program obvykle nerobí nič, až keď mu príde udalosť od užívateľa tak vykoná nejakú akciu (napr. vypíše písmeno do textového poľa)
príklad - zadávanie textu do boxu, použije sa konečný automat
Implementácia miestom v programe:
stále cyklíme kým nedostaneme užívateľský vstup a potom vykonáme akciu (skok pomocou goto)
výhody - je to jednoduché a prirodzené (pre programátora)
nevýhody - ťažko modifikovateľné, ťažko rozšíriteľné
Implementácia stavovou premennou:
switch podľa aktuálneho stavu (stav editovaného riadku) a v každej case „vetve“ ďalší switch podľa stlačenej klávesy
výhody - lepšie modifikovateľné, ľahko rozšíriteľné
nevýhody - zložitejší automat
na základe tohto prístupu fungujú udalosťami riadené systémy - existuje nejaký centrálny „zberač“, ktorý zachytáva všetky vstupy a posiela ich príslušným oknám/aplikáciám, arbiter rozhoduje aký podprogram sa má zavolať (obvykle podľa polohy kurzora - napr. keď klikneme na X pre zavretie okna…)
Správy
technicky sa to rieši pomocou posielania správ - hlavný arbiter dostane po stlačení klávesy správu o udalosti, zistí aké okno má focus a tomu tú správu pošle (správy sú spracovávané na základe okien, každé okno musí byť schopné prijať správu)
štruktúra správy:
int Msg - typ správy (čo to je za správu - stlačenie klávesy, pohyb myši, užívateľsky definované správy…)
int Window - okno, pre ktoré je správa určená (každé okno má svoje jednoznačné číslo)
int Param1 - parameter správy (závislé na type správy - napr.
ASCII kód klávesy, súradnica pohybu myši…)
int Param2 - parameter správy
v praxi - každé okno musí mať nejakú funkciu (v C napr. exportovanú funkciu), ktorá slúži na obsluhu prichádzajúcej správy, potom
OS zavolá túto funkciu
v OO jazykoch - je nejaká metóda HandleAll(), ale tá len volá iné metódy, ktoré obsluhujú samotné správy, takže stačí preťažiť metódu na obsluhu konkrétnej správy, nie ručne písať obsluhu každej jednej správy
class Window
{
virtual void HandleAll(Message)
{
switch(Message.Msg)
{
...
}
}
virtual void OnButton(...);
virtual void OnMouse(...);
virtual void OnTimer(...);
...
}
class MyWindow: public Window
{
void OnButton(...);
...
}
Programy vo Windows
programy s resource - samostatný návrh
GUI, súbor “.rc“, ten sa preloží (vznikne súbor “.res“) a následne zlinkuje so zdrojovým súborom, názvy jednotlivých prvkov rozhrania sú definované v hlavičkovom súbore
čísla správ:
globálne - preddefinované (nedajú sa meniť, sú ich tisíce)
užívateľské lokálne - WM_USER+konštanta - dajú sa používať interne v rámci programu
užívateľské globálne - platné v rámci sedenia vo Windows, vo všetkých aplikáciách majú rovnaké číslo
okná:
WindowRect - oblasť celého okna
ClientRect - oblasť do ktorej sa kreslí
stav, súradnice, titulky, ikony, okraje, typ
device context:
kreslenie obsahu okien
abstraktná kresliaca oblasť, ktorá má rozmery a atribúty (napr. aktuálny typ čiary)
nie je totožný s oknom (je väčší, umožňuje kresliť na displej ale aj na tlačiareň)
aktuálne zobrazený obsah okna nie je vo Windows uchovávaný
každé okno musí byť kedykoľvek schopné vykresliť svoj obsah (na základe správy WM_PAINT)
obmedzenie obsahu vykresľovania na to, čo je vidieť je automatické a nedá sa moc ovplyvniť (skryté časti okna sa neprekresľujú)
dá sa aktívne obmedziť vykresľovanie na viditeľnú oblasť, ak sa to v programe oplatí (funkcia GetUpdateRect())
Windows grafický subsystém uchováva informáciu o tom, ktorá časť ktorých okien je správne vykreslená, oblasť sa stane neplatnou napr. „odkrytím“, vtedy pošle Windows správu WM_PAINT aplikácii, keď to chce aplikácia tak zavolá funkciu InvalidateRect()
Zdroj
Potvrzení
13 |
Celé jméno | OK | !!! |
roman jasho | | |
Jirka Hynek | | |
| 2 | |
Diskuze
k tem UI by chtelo dopsat neco jako obecnej pohled, co to vlatne je UI, s cim se cloveka potkava a co je potreba resit
http://en.wikipedia.org/wiki/Principles_of_User_Interface_Design
http://www.sylvantech.com/~talin/projects/ui_design.html
http://www.ambysoft.com/essays/userInterfaceDesign.html
co sem letmo nasel
Nakopčil jsem tu obecný úvod, co je na wp, myslím, že je to takto OK.