Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
C/C++
Učime se Win API - 23.
winapi_logo
24. června 2002, 00.00 | V tomto pokračování se naučíme základům používání registrační databáze pro ukládání
konfigurace programu nebo nějakých dalších informací. V doprovodném příkladu
budeme mít za úkol zapsat do registrů polohu a velikost okna při ukončení
aplikace.
V tomto pokračování se naučíme základům používání registrační databáze pro ukládání konfigurace programu nebo nějakých dalších informací. V doprovodném příkladu budeme mít za úkol zapsat do registrů polohu a velikost okna při ukončení aplikace a při dalším spuštění okno zobrazit v této pozici. Dále si uložíme (ze cvičných důvodů) jako řetězec datum a čas ukončení programu a toto pak zobrazíme při dalším spuštění jako text v okně.
Podobně jako při práci se soubory musíme nejprve požadovaný klíč v registrační databázi otevřít (nebo vytvořit), tím získáme jeho handle. Tento handle pak použijeme v dalších funkcích pro práci s údaji v registrech. Po provedení požadovaných operací handle klíče opět zavřeme.
Otevření klíčePro otevření nebo vytvoření klíče nám slouží funkce RegCreateKeyEx:
|
Řekněme si o významu těch důležitých parametrů:
hKey - handle již otevřeného klíče nebo jedna z předdefinovaných hodnot většinou určující větev v registrech, jak ostatně napovídá přehled možných hodnot:
|
lpSubkey - jméno podklíče, který chceme otevřít.
samDesired - požadovaný přístup ke klíči. Pokud chceme plný přístup pro zápis a čtení, můžeme jednoduše uvést hodnotu KEY_ALL_ACCESS, nebo pro zvýšení "bezpečnosti" některou z dalších hodnot (jejich seznam s popisem naleznete v dokumentaci Windows SDK), které nějakým způsobem omezují jisté operace.
phkResult - v tomto parametru nám funkce vrátí handle požadovaného klíče.
lpdwDisposition - v tomto parametru nám funkce vrátí hodnotu určující, zda byl otevřen existující klíč nebo vytvořen klíč nový. Může nabývat hodnot REG_CREATED_NEW_KEY nebo REG_OPENED_EXISTING_KEY, jejichž význam je jistě vypovídající.
Pokud funkce skončí úspěšně, návratová hodnota je ERROR_SUCCESS, jejíž název je zní angličtiny možná trochu podivně (česky "chyba_úspěch"), nicméně opravdu značí úspěšné otevření požadovaného klíče v registrech.
Zápis do registruKdyž máme klíč úspěšně otevřen nebo vytvořen, můžeme zapisovat hodnoty funkcí RegSetValueEx:
|
Podrobnější popis a význam jednotlivých parametrů naleznete v dokumentaci Windows SDK a nebudu ho zde opisovat, raději si vše ukážeme na příkladě. Vytvořme si funkci, která nám otevře zadaný klíč. Název klíče si v programu vytvoříme pomocí direktivy define:
|
Dále si vytvoříme funkce pro zápis číselné hodnoty (typ DWORD) a textových řetězců:
|
V obou případech zadáme jako parametr hKey handle předtím otevřeného klíče.
Na zavření klíče v registrech si také napíšeme jednoduchou funkci volající API funkci RegCloseKey:
|
Nyní se podívejme, jak s využitím těchto funkcí zapíšeme v handleru zprávy WM_CLOSE požadované výše zmíněné informace do registru:
|
Nyní se ještě musíme naučit informace z registru také přečíst. K tomu nám slouží funkce RegQueryValueEx, kterou zde uvedu také bez podrobného popisu parametrů (je v dokumentaci), ale ukážeme si samozřejmě příklad.
|
Také pro načítání si připravíme 2 vlastní funkce pro čtení číselné a textové hodnoty:
|
Jako příklad si ukažme, jak v doprovodném programu načteme informace zapsané při předchozím ukončení a jak zjistíme, zda záznam v registrech neexistuje, tedy že se pravděpodobně jedná o první spuštění programu v tomto uživatelském účtu.
|
Tuto funkci zavoláme před vytvořením okna, pokud není nalezen záznam v registrech, nastavíme poloho a rozměry okna na výchozí hodnotu, stejně jako informativní text, jehož výpis v handleru WM_PAINT, je pro čtenáře jistě již rutinní záležitostí.
Jako "domácí úkol" si mohou zájemci program doplnit tak, aby byl odstraněn následující "bug": Pokud totiž okno zavřeme dostatečně vpravo či dole, poté zmenšíme rozlišení obrazovky, při dalším spuštění se nám může stát že zaznamenáme "aut", tedy okno bude celé "zobrazené" mimo viditelnou oblast obrazovky.
Zde je ke stažení doprovodný projekt: win_api_23.zip (6 kB).
Obsah seriálu (více o seriálu):
- Učíme se Win API - motivační úvod
- Učíme se WinAPI - Začínáme
- Učíme se WinAPI - 3.
- Učíme se Win API - 4.
- Učíme se Win API - 5.
- Učíme se Win API - 6.
- Učíme se Win API - 7.
- Učíme se Win API - 8
- Učíme se Win API - 9.
- Učíme se Win API - 10.
- Učíme se Win API - 11.
- Učíme se Win API - 12.
- Učíme se Win API - 13.
- Učíme se Win API - 14.
- Učíme se Win API - 15.
- Učíme se Win API - 16.
- Učíme se Win API - 17.
- Učime se Win API - 18.
- Učime se Win API - 19.
- Učime se Win API - 20.
- Učime se Win API - 21.
- Učime se Win API - 22.
- Učime se Win API - 23.
- Učime se Win API - 24.
- Učíme se Win API - 25.
- Učíme se Win API - 26.
- Učíme se Win API - 27.
- Učíme se Win API - 28.
- Učíme se Win API - uživatelsky kreslený ListBox
- Učíme se Win API - uživatelsky kreslený ListBox II
- Dialog výběru složky a naplnění ListBoxu soubory
- Vyhledávání souborů - zjištění obsahu složky
- Pracujeme s ComboBoxem ve WinAPI
- Pracujeme s ComboBoxem II.
- Rozšířený prvek ComboBoxEx
- Ovládací prvek TrackBar
- Ovládací prvek Progress Bar
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007