Image
22.6.2016 0 Comments

C++ pod Windows / Mapovacie režimy a rolovanie / 8. časť

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

Začal sa nám marec – mesiac kníh. Ako sa tak pozerám na uponáhľaný vývoj, rôzne „future“ vízie a predpovede, dúfam, že marec ostane mesiacom kníh aj naďalej a že sa nezmení na mesiac digitálnej fotografie alebo niečo podobné. Teraz si pravdepodobne myslíte, že som človek, ktorý nemá rád nové veci a najradšej by sa zavrel v pivnici so starožitnosťami a spomínal na staré dobré časy. Naopak. Nesmierne sa teším novým objavom (nemusia byť len z oblasti IT) a veľmi by som sa chcel pozrieť tak o sto až dvesto rokov do budúcnosti, ako bude vyzerať náš svet. To, žiaľ, nie je v mojej moci. Prečo potom chcem byť taký staromódny a zachovávať veci, ako sú knihy? Asi preto, že knihy boli, sú a budú súčasťou nášho života, niečím, čo po dlhé roky tvorilo obraz o svete, v ktorom žijeme. Dnes síce ich význam ustupuje pod tlakom väčších a silnejších informačných médií, ale ako by sme dopadli, keby sme len neustále inovovali, nahrádzali staré veci novými? Hoci je to logicky („počítačovo“) správne, nemali by sme to robiť a vo svojom vnútri by sme mali stále ostať ľuďmi a nemeniť sa na počítače. Potom radšej meňme počítače na svoj obraz a nedovoľme počítačom meniť nás ľudí na ich obraz!

Po krátkom zamyslení sa poďme pozrieť, čo nás čaká v štúdiu programovania pod Windows. V predošlej časti som vám sľúbil, že sa bližšie pozrieme na techniku zobrazovania údajov v okne, inak povedané, na mapovacie režimy. Svoj sľub hodlám aj dodržať s tou výnimkou, že si opíšeme len základnú prácu s nimi a nebudeme zbytočne zachádzať do podrobností. Vzhľadom na vaše doterajšie vedomosti by to nemalo veľký význam, a ako som písal v jednej z predchádzajúcich častí, v seriáli sa chcem venovať viac praktickým problémom. K mapovacím režimom sa podrobnejšie vrátime, až keď budeme preberať tlač.

Samozrejme, ako sa stalo už pravidlom, na konci tejto časti nájdete zoznam niekoľkých stránok, ktoré sa venujú programovaniu vo Windows. Pridal som aj zoznam diskusných skupín zaoberajúcich sa touto problematikou. Dúfam, že sa vám do nich podarí zapojiť.

MAPOVACIE REŽIMY (MAPPING MODES). V našich doterajších aplikáciách sme používali na kreslenie na obrazovku pixely zobrazovacieho zariadenia. Presnú definíciu pixela ponechám na nejaký seriál o grafike, nám bude stačiť vedieť, že pixel je jeden bod na obrazovke. Teda napríklad taký priemerný štvorec sa môže skladať povedzme zo 100 × 100 pixelov (bodiek). Tieto pixely zobrazovacieho zariadenia sa inak nazývajú aj súradnice zariadenia (device coordinates). Kresliacimi jednotkami všetkých doterajších aplikácií uvedených v tomto seriáli boli práve tieto pixely, pretože kontextu zariadenia bol priradený implicitný (keďže sme my nepriradili iný) mapovací režim MM_TEXT, ktorý určuje práve použitie pixelov ako jednotiek na kreslenie. Keby sme napríklad chceli nakresliť štvorec s rozmermi 100 × 100 pixelov, s horným ľavým rohom v ľavom hornom rohu používateľskej oblasti okna, použili by sme nasledujúci príkaz:

pDC->Rectangle(CRect(0, 0, 100, 100));

Niečo podobné môžete nájsť v aplikácii Hi, pozrite si siedmu časť a riešenie domácej úlohy. Tam na kreslenie používame príkaz:

pDC->Ellipse(rectMax);

Ten nakreslí elipsu s rozmermi klientskeho okna, pretože objekt rectMax sme predtým naplnili rozmermi tejto oblasti okna:

GetClientRect(rectMax);

Nakreslíme teda kružnicu vo veľkosti klientskeho okna, ale kresliacimi jednotkami budú stále pixely. Asi teraz dobre nechápete, načo vlastne sú tie mapovacie režimy. Pixely majú totiž jednu dosť podstatnú nevýhodu. Keby sme si zobrali napríklad vytvorený štvorec: pDC->Rectangle(CRect(0, 0, 100, 100)), rozmery tohto štvorca by celkom logicky boli rozdielne pri rôznych rozlíšeniach. Pri rozlíšení 1024 × 768 by tento štvorec bol menší ako pri rozlíšení 800 × 600 pixelov a ten menší ako pri rozlíšení 640 × 480 pixelov. Štvorec by mal stále rozmery 100 × 100 pixelov, ale zdal by sa pri rôznych rozlíšeniach menší alebo väčší. No fajn, ale čo keď potrebujeme, aby sa rozmery zachovávali pri všetkých rozlíšeniach? Tu si už, žiaľ, nevystačíme len s použitím pixelov ako súradníc zariadenia, budeme musieť použiť tzv. logické súradnice (logical coordinates). Tie priradíme do kontextu zariadenia práve formou mapovacieho režimu (čiže my namapujeme súradnice na dané kresliace jednotky). V tab. 1 môžete vidieť jednotlivé mapovacie režimy a ich kresliace jednotky. Ak teda budeme chcieť nakresliť štvorec s rozmermi 5 × 5 cm, použijeme napríklad mapovací režim MM_LOMETRIC a štvorec nakreslíme príkazom:

pDC->Rectangle(CRect(0, 0, 500, -500));

Teraz bude mať náš štvorec rozmery 5 × 5 cm bez ohľadu na práve nastavené rozlíšenie. Tu však prichádzame k menšiemu problému. Logické súradnice totiž nemôžete používať stále. Niečo pracuje lepšie len s logickými súradnicami, naopak, niečo pracuje lepšie (alebo dokonca len) so súradnicami zariadenia. Vy programátori to musíte zistiť a vhodne prepnúť medzi logickými súradnicami a súradnicami zariadenia. Opíšme si teraz bližšie, aké mapovacie režimy Windows ponúka.

Mapovací režim MM_TEXT: Nemyslite si, že keď mapovací režim MM_TEXT používa ako svoje kresliace  jednotky pixely, je jeho použitie rovnaké, ako keby sme používali súradnice zariadenia (i keď, pravdu povediac, nie ste ďaleko od pravdy). Pri jeho použití sa hodnota x zväčšuje smerom doprava a hodnota y sa zväčšuje smerom dole. Tento mapovací režim vám dovoľuje ešte aj meniť súradnice začiatku. Pomocou funkcií  SetViewportOrg SetWindowOrg môžete napríklad posunúť začiatok súradníc z bodu 0, 0 do bodu 100, 100. Patrí to k vyššej matematike použitia mapovacích režimov, preto vás v tomto bode odkazujem na help k Visual C++.

Mapovacie režimy s pevnou mierkou: Ich anglický ekvivalent je fixed-scale mapping modes. Sú to tie, ktoré môžete vidieť v tab. 1.  Pre všetky platí, že hodnota x sa zväčšuje smerom doprava a hodnota y sa zmenšuje smerom dole. Ktorý z nich použijete, záleží len na vás. Líšia sa len v použití iných logických (kresliacich) jednotiek (majú iné mierky). V našich zemepisných šírkach sa budú asi najviac využívať tie, ktoré majú logickú jednotku milimeter. Alebo sa vám nebodaj chce prepočítavať na palce?

Mapovacie režimy s premenlivou mierkou: Inak variable-scale mapping modes. Sú to také mapovacie režimy, ktoré okrem toho, že dovoľujú nastaviť mierku inú ako pixel (tým sa líšia od MM_TEXT), umožňujú aj posun začiatku súradníc. Okrem toho umožňujú prispôsobovať obrázok veľkosti okna alebo preklopiť obrázok okolo jednej z osí. Poznáme dva: MM_ISOTROPIC MM_ANISOTROPIC. Ako sme už uviedli, ich použitie je nateraz zbytočne zložité, zatiaľ si vystačíme s mapovacími režimami, ktoré používajú pevnú mierku. Prípadným záujemcom odporúčam help.

Mapovací režim

Logická jednotka

MM_LOMETRIC

0,1 mm

MM_HIMETRIC

0,01 mm

MM_LOENGLISH

0,01 palca

MM_HIENGLISH

0,001 palca

MM_TWIPS

1/1440 palca

Tab. 1 Mapovacie režimy s pevnou mierkou a ich logické jednotky

PREVOD SÚRADNÍC. Teraz prichádza na rad ten problém, ktorý sme už spomínali. Ak totiž raz nastavíte mapovací režim, môžete použiť jeho logické súradnice takmer pre všetky funkcie triedy CDC. No napríklad funkcie triedy CRect pracujú dobre iba so súradnicami zariadenia. Vy teda musíte vedieť, akú členskú funkciu ktorej triedy používate, a podľa toho prepínať medzi logickými súradnicami a súradnicami zariadenia. Pri tom by vám mohli pomôcť nasledujúce všeobecne platné pravidlá:

1.   Pre členské funkcie triedy CDC používajte logické súradnice.

2.   Pre členské funkcie triedy CWnd používajte súradnice zariadenia.

3.   Ak chcete zistiť, aká je pozícia myši pri pohybe v okne alebo pri kliknutí, používajte súradnice zariadenia.

4.   Ak chcete zachovať nejakú súradnicu v premennej na neskoršie použitie, používajte logické súradnice.

5.   Ak chcete zistiť, či sa kurzor nachádza v nejakej oblasti, používajte súradnice zariadenia.

Prevod súradníc z logických na súradnice zariadenia zabezpečuje funkcia LPtoDP a naopak (zo súradníc zariadenia na logické) funkcia DPtoLP. Obidve sú členskými funkciami triedy CDC. Ich použitie si ukážeme v príklade 2.

PRÍKLAD 1 – POUŽITIE MAPOVACÍCH REŽIMOV. Na príklade si teraz ukážeme použitie mapovacích režimov. Pomocou App Wizardu vytvorte novú aplikáciu s názvom Mapper. Postup nájdete v šiestej časti. Všetky nastavenia okrem tých, ktoré vidíte na obrázkoch, nechajte default.

1. krok:  V prostredí Visual C++ vyberte z menu File -> New. Dialóg, ktorý sa vám zobrazí, vyplňte podľa

obr. 1 (kliknite na MFC AppWizard (exe) a v kolónke Project name zadajte Mapper).

2. krok: Po potvrdení dialógu New sa zobrazí už známy prvý krok tvorenia aplikácie pomocou App Wizardu. Zvoľte Single document, tak ako vidíte na obr. 2.

3. krok: Ostatné nastavenia nechajte na prednastavených hodnotách. To znamená, že klikajte na Next, až sa vám zobrazí posledný dialóg App Wizardu, potom kliknite na Finish alebo rovno v predchádzajúcom kroku, kde ste volili typ aplikácie, kliknite na Finish.

Obr 1   Zadávanie mena nového projektu

Obr 2   Vyberanie typu aplikácie

Máme teda vytvorenú základnú, ale funkčnú kostru aplikácie Mapper. Najprv na demonštráciu toho, čoho sú schopné mapovacie režimy, pridajte nasledujúci kód. Zmeňte telo funkcie OnDraw, ako vidíte na nasledujúcom výpise:

void CMapperView::OnDraw(CDC* pDC)
{
      pDC->SelectStockObject(GRAY_BRUSH);
      pDC->Ellipse(0, 0, 200, 200);
}

Aplikáciu skompilujte a spusťte. Výstupom je sivá kružnica. Ako sme si už vysvetľovali, implicitný mapovací režim je nastavený na MM_TEXT, takže na obrazovke máme kružnicu s rozmermi (priemermi) 200 × 200 pixelov (pDC->Ellipse(0, 0, 200, 200);). Skúste teraz len tak pre zaujímavosť vybrať z menu File tejto aplikácie Print Preview. Uvidíte, že keby ste túto kružnicu, tak ako je, vytlačili, na papieri by vyzerala o dosť menšia ako na obrazovke. Je to práve použitím pixelov ako kresliacich jednotiek. Na tlač sa totiž používa iné rozlíšenie ako pri zobrazovaní na obrazovku. Ak chceme, aby veľkosť kružnice bola stála pre všetky rozlíšenia, musíme použiť iný mapovací režim. Čo tak napríklad MM_LOMETRIC? Mapovací režim je najlepšie nastavovať vo virtuálnej funkcii triedy Cview, a síce OnPrepareDC. Dá sa to aj inde, ale táto funkcie je na to priamo určená. Pomocou Class Wizardu pridajte do triedy CMapperView virtuálnu funkciu OnPrepareDC a do jej tela pripíšte tento kód:

void CMapperView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
      pDC->SetMapMode(MM_LOMETRIC);
}

Aby sa vám vôbec niečo zobrazilo, musíte pozmeniť kód na vytváranie kružnice vo funkcii OnDraw. Súradnice y sa totiž pri použití tohto mapovacieho režimu zmenšujú smerom nadol, takže kód na nakreslenie kružnice musí vyzerať takto:

pDC->Ellipse(0, 0, 200, -200);

Teraz po spustení programu sa zobrazí kružnica, ktorá bude pri všetkých rozlíšeniach rovnako veľká (vždy bude mať priemer 2 cm). Skúste si aj iné rozmery kružnice, prípadne iné mapovacie režimy a posúďte sami.

PRÍKLAD 2 – PREVOD SÚRADNÍC. Aby ste lepšie pochopili, na čo je dobrý prevod súradníc, trošku zdokonalíme príklad 1. Skúsme zisťovať polohu myši pri stlačení jej ľavého tlačidla a na základe toho určiť, či sa nachádza vnútri nakreslenej elipsy. Ako na to? V prvom rade treba pomocou Class Wizardu „namapovať“ obsluhu správy WM_LBUTTONDOWN pre triedu CMapperView. Potom pridajte nasledujúci kód do tela tejto funkcie:

void CMapperView::OnLButtonDown(UINT nFlags, CPoint point)
{
      CClientDC dc(this);
      OnPrepareDC(&dc);
     
      CRect rect(0, 0, 200, -200);
      dc.LPtoDP(rect);
      if (rect.PtInRect(point))
      {
            TRACE("Poloha kurzora je:%d %d\n", point.x, point.y);
           
      }
}

Princíp tohto kódu je taký, že ak sa kurzor myši pri stlačení ľavého tlačidla myši nachádza vnútri elipsy (podmienka if (rect.PtInRect(point)) ), zobrazíme pomocou makra TRACE jeho súradnice. Ak klikneme vedľa, nič sa nestane. Už sme spomenuli, že súradnice polohy kurzora, ako aj súradnice nejakej oblasti (v tomto prípade je to oblasť CRect rect(0, 0, 200, -200) ) by mali byť v súradniciach zariadenia, a nie v logických súradniciach. Ak teraz okomentujete riadok dc.LPtoDP (čiže logické súradnice oblasti, do ktorej klikáme, sa neprevedú na súradnice zariadenia), makro TRACE už nevypíše polohu kurzora, aj keď kliknete do vnútra elipsy.

ROLOVANIE. Myslím si, že by bolo zbytočné vysvetľovať, čo vlastne rolovanie je. Pozrime sa skôr, ako sa dá používať v našich programoch. Základná trieda pre všetky pohľady je trieda CView. Táto trieda však sama osebe rolovanie nepodporuje. Aby sme ho mohli využívať, musíme na to použiť triedu CScrollView, ktorá je potomkom triedy CView a rolovanie už podporuje, hoci len čiastočne. To čiastočne znamená, že vie obsluhovať kliknutie myšou na posúvaciu pásku (posuvník, scroll bar), ale nevie obslúžiť rolovanie pomocou klávesnice. Našťastie tento „nedostatok“ sa dá ľahko doprogramovať (ukážeme si to v príklade 3).

AKO TO PRACUJE? Rolovanie pracuje skutočne na jednoduchom princípe a väčšinu práce za nás urobí aplikačný systém. Členské funkcie triedy CScrollView spracúvajú správy WM_HSCROLLWM_VSCROLL a na základe prijatia jednej z týchto správ vykonajú buď horizontálny, alebo vertikálny posun informácií v okne.

PRÍKLAD 3 – ROLOVANIE. Opäť sa pustíme do tvorenia novej aplikácie pomocou App Wizarda. Takže z menu File vyberte New, kliknite na záložku Projects, potom na MFC AppWizard (exe) a do názvu projektu zadajte Roller. Kliknite na OK. V dialógu, ktorý sa vám zobrazí, vyberte Single document a kliknite na Next. Na všetkých ďalších dialógoch App Wizardu nechajte prednastavené hodnoty, až sa dostanete na posledný (šiesty) dialóg App Wizardu. Tam vyberte triedu CRollerView a v zozname Base Class vyberte triedu CScrollView (presne ako na obr. 3). Po vybratí kliknite na Finish a App Wizard vám vygeneruje novú aplikáciu.

Obr. 3 Vybratie podpory rolovania pre aplikáciu

Aby sme videli, že vôbec niečo roluje, použijeme opäť kružnicu ako v príklade 1. Upravte preto funkciu OnDraw presne tak, ako ste ju upravovali v príklade 1. Na nastavenie posuvníkov sa používa funkcia SetScrollSizes (členská funkcia triedy CScrollView). Otázne je, kde toto nastavenie uskutočniť. Bolo by dobré použiť takú funkciu, ktorá sa volá ako prvá po úplnom vytvorení okna pohľadu, teda ešte pred prvým zavolaním funkcie OnDraw. A takouto funkciou nie je OnPaint ani OnPrepareDC, ale funkcia OnInitialUpdate. Táto funkcia je už implicitne do triedy pohľadu pridaná aplikačným systémom, preto len pozmeňte jej telo takto:

void CRollerView::OnInitialUpdate()
{
      CScrollView::OnInitialUpdate();
 
      // nastavi logicke okno 20 × 30 cm
      CSize sizeTotal(2000, 3000);
      // urcuje, o kolko sa odroluje okno, ak kliknete do vnutra posuvacej pasky
      CSize sizePage(sizeTotal.cx/2, sizeTotal.cy/2);
      // urcuje, o kolko sa odroluje okno, ak kliknete na rolovaciu sipku
      CSize sizeLine(sizeTotal.cx/50, sizeTotal.cy/50);
      // podla ziskanych informacii nastavi rolovacie pasky
      SetScrollSizes(MM_LOMETRIC, sizeTotal, sizePage, sizeLine);
}

Všimnite si, že na určovanie rozmerov sme použili objekt triedy CSize (podrobne pozri help). A ešte jedna malá poznámočka. V príklade Roller neprepisujeme funkciu OnPrepareDC, aj keď používame mapovací režim MM_LOMETRIC. Prečo? Pretože ak používame triedu CScrollView, tá nastavuje mapovací režim podľa prvého parametra funkcie SetScrollSizes, a preto by ešte jedno nastavovanie vo funkcii OnPreprareDC nemalo zmysel.

Skúste teraz príklad preložiť a spustiť a vyskúšajte jeho funkčnosť.  Že sa vôbec posuvníky zobrazia, je dané

tým, že sme ako rozmer logického okna uviedli 20 × 30 cm, čo je viac, ako je možné zobraziť na klasickom monitore (skúste zvoliť tento rozmer menší a uvidíte sami). No ak v tejto verzii príkladu Roller chcete rolovať aj pomocou klávesnice, nebude to fungovať. Aby sme to mohli opraviť, treba ešte povedať, ako aplikácia založená na knižnici MFC dokáže obslúžiť vstup z klávesnice. Ak stlačíte nejaký kláves, Windows pošle tomu oknu správy WM_KEYDOWNWM_KEYUP aj s kódmi virtuálnych klávesov (napríklad pre kláves HOME je to VK_HOME, pre šípku doprava VK_RIGHT atď., VK – virtual key; kompletný zoznam nájdete v helpe). Ešte sa skontroluje prípadná prítomnosť klávesu SHIFT (ak je zistená, potom sa napr. písmeno transformuje na veľké) a pošle sa správa WM_CHAR s kódom pre veľké alebo malé písmeno. Class Wizard vám dovoľuje mapovať všetky tieto správy (t. j. WM_CHAR, WM_KEYUP, WM_KEYDOWN). Na vás zostáva, akú si zvolíte. Ak očakávate stlačenie niektorého klávesu s písmenom, použite WM_CHAR, ak to môžu byť aj iné klávesy, tak vám odporúčam WM_KEYDOWN. Tým je náš problém vyriešený. Pomocou Class Wizardu pridajte obsluhu správy WM_KEYDOWN a zmeňte jej telo takto:

void CRollerView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
      switch (nChar)
      {
      case VK_HOME:
            OnVScroll(SB_TOP, 0, NULL);
            OnHScroll(SB_LEFT, 0, NULL);
            break;
      case VK_END:
            OnVScroll(SB_BOTTOM, 0, NULL);
            OnHScroll(SB_RIGHT, 0, NULL);
            break;
      case VK_UP:
            OnVScroll(SB_LINEUP, 0, NULL);
            break;
      case VK_DOWN:
            OnVScroll(SB_LINEDOWN, 0, NULL);
            break;
      case VK_LEFT:
            OnHScroll(SB_LINELEFT, 0, NULL);
            break;
      case VK_RIGHT:
            OnHScroll(SB_LINERIGHT, 0, NULL);
            break;
      default:
            break;
      }
}

Teraz už môžete rolovať pomocou klávesov HOME, END, šípky naľavo, napravo, hore a dole. Myslím si, že tento kód nepotrebuje bližší komentár, azda si len všimnite, ako sa po stlačení klávesov HOME a END realizuje posun na začiatok/koniec okna.

TIPY NA WWW. www.games-developer.com – zaujímavá stránka pre tvorcov hier. Nájdete tu napríklad linky na free enginy na tvorbu 3D hier.

ftp.spies.com – ak si myslíte, že programovanie nemôže byť zábavné, skúste túto stránku. Choďte do adresára LIBRARY/HUMOR/CODE

Ak sa chcete zapojiť do diskusných skupín zaoberajúcich sa programovaním vo Windows, skúste tieto:

comp.os.ms-windows.programmer

comp.os.ms-windows.programmer.controls

comp.os.ms-windows.programmer.graphics

comp.os.ms-windows.programmer.multimedia

comp.os.ms-windows.programmer.drivers

comp.os.ms-windows.programmer.networks

comp.os.ms-windows.programmer.memory

comp.os.ms-windows.programmer.misc

comp.os.ms-windows.programmer.ole

comp.os.ms-windows.programmer.tools

comp.os.ms-windows.programmer.win32

Slovo za poslednou bodkou určuje, akej témy sa bude diskusia týkať. Myslím, že každý si príde na svoje.

TIPY NA DOMA. Naprogramujte jednoduchú hru (nie, to nie je vtip). Do okna nakreslite povedzme 10 kružníc, ktoré budú plniť funkciu terčov. Pri každom stlačení ľavého tlačidla myši vyhodnoťte pozíciu kurzora, a ak sa nachádza vnútri nejakej kružnice, pripočítajte jeden bod. Informáciu o bodoch môžete zobrazovať napríklad pomocou funkcie TextOut. Dávate si pozor na prepínanie medzi logickými súradnicami a súradnicami zariadenia.

Tip: Ak chcete, aby po kliknutí na nejakú kružnicu tá aj zmizla, nevyhnete sa použitiu funkcie InvalidateRect, ktorú budete volať z funkcie OnLButtonDown (pozri. help). Táto funkcia spôsobí odoslanie správy WM_PAINT, čím sa zavolá funkcia OnDraw, kde môžete realizovať prekreslenie. Parametrom tejto funkcie je oblasť, ktorú chceme prekresliť. Keby ste chceli v príklade 2 prekresliť kružnicu zakaždým, keď na ňu kliknete, zmenili by ste funkciu OnLButtonDown takto:

void CMapperView::OnLButtonDown(UINT nFlags, CPoint point)
{
      CClientDC dc(this);
      OnPrepareDC(&dc);
     
      CRect rect(0, 0, 200, -200);
      dc.LPtoDP(rect);
      if (rect.PtInRect(point))
      {
            TRACE("Poloha kurzora je:%d %d\n", point.x, point.y);
            InvalidateRect(rect);
      }
}

NABUDÚCE. Nabudúce sa bližšie pozrieme na GDI objekty knižnice MFC a možno začneme preberať aj veľmi rozsiahlu, ale zato zaujímavú tému: dialógy, ktorým budeme venovať minimálne tri časti. Dovidenia v apríli.

Zobrazit Galériu

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á