Dialogy a základy GUI pro.net VI
Obsah uživatelem definované dialogy standardní dialogy a dialogy shellu základy GUI v.netu 2
Dialogy speciální případ okna komunikace s uživatelem základní vlastnosti zpravidla neměnná velikost implicitní reakce na klávesy modální nemodální dialog generování speciálních zpráv funkcionalita dialogu: dodaná funkce parametry shodné s WindowProc implicitní obsluha zpráv: DefDlgProc možno použít DefWindowProc Win32API 3
Dialogy: Modální dialog aplikace: čekání na návratový kód přebrání kontroly nad smyčkou zpráv některé zprávy přeposílány vlastníku chování vůči vlastníku (okno) aplikačně modální: zakázání vlastníka většina dialogů systémově modální: vždy na vrchu úkolově modální (task modal) zakázaní všech top-level oken daného vlákna operace vytvoření a spuštění: DialogBox* ukončení: EndDialog Win32API 4
Dialogy: Nemodální dialog podobné obyčejnému oknu nutno modifikovat smyčku zpráv generování speciálních zpráv dialogu IsDialogMessage reakce na dialogové klávesy inicializace dialogu operace vytvoření: CreateDialog* spuštění: ShowWindow uzavření dialogu zpravidla: uzavření = skrytí dialogu nutno explicitně zrušit: DestroyWindow Win32API 5
Dialogy: Styly dialogu upravují chování dialogu DS_CONTROL: povolení dialogu jako child nutné po použití v property pages DS_CONTEXTHELP: kontextová nápověda podmíněno: WS_EX_CONTEXTHELP generuje WM_HELP DS_SETFONT nastaví fontu dle definice dialogu povolení generování WM_SETFONT upravují vytváření dialogu DS_CENTER: vycentrování okna dialogu DS_CENTERMOUSE: vycentrování kurzoru Win32API 6
Dialogy: Zprávy dialogu zpracovány dialogovou funkcí WM_INITDIALOG nastavení ovládacích prvků možno předat data při vytvoření WM_SETFONT: nastavení fontu WM_CANCELMODE žádost o uvolnění myši vlastníkem WM_HELP: kontextová nápověda reakce na klávesu <F1>: ovládací prvku s focusem dotazovací kurzor: vybraný ovládací prvek Win32API 7
Dialogy: Definice dialogu resources vytvořeno zpravidla před překladem strukturovaný popis dialogu: textová podoba zpravidla návrh pomocí různých editorů kompilace do binární podoby: resources funkce: *Param (DialogBoxParam) programově vytvoření struktury podobné resources struktury DLGTEMPLATE DLGITEMTEMPLATE funkce: *Indirect (DialogBoxIndirect) Win32API 8
Dialogy: Ovládací prvky nutno identifikovat unikátním ID užito pro práci s ovládacími prvky převod ID handle ovládacího prvku funkce GetDlgCtrlID / GetDlgItem hodnota ovládacího prvku celočíselná hodnota textu ovládacího prvku vrací: info o úspěšnosti (neúspěch: nula) funkce GetDlgItemInt / SetDlgItemInt text ovládacího prvku funkce GetDlgItemText / SetDlgItemText blokující vyslání zprávy ovládacímu prvku funkce SendDlgItemMessage Win32API 9
Dialog MFC I potomek třídy CDialog definice dialogu: resources spuštění dialogu modální: DoModal nemodální: Create ukončení dialogu modální: EndDialog voláno defaultní implementací OnOK/OnCancel nemodální: viz okno OnClose: implicitně ruší okno, nikoliv objekt zrušení objektu nutno přidat do PostNcDestroy MFC 10
Dialog MFC: Standardní události počáteční nastavení: OnInitDialog voláno před prvním zobrazením obdoba WM_INITDIALOG možnost určit počáteční focus tlačítko IDOK: OnOK přetěžováno pro nemodální dialogy tlačítko IDCANCEL: OnCancel MFC 11
Dialog MFC: Přístup na data I základní: GetDlgItem viz Win32 DDX: Dialog Data Exchange data a ovládací prvky: atributy třídy ovládací prvky: instance patřičných tříd aplikace dat na ovládací prvky: UpdateData určení směru předání dat: do/z ovl. prvku voláno standardní implementací OnInitDialog modální: před návratem z DoModal přenos dat: DoDataExchange přenos dat: funkce DDX_* MFC 12
Dialog MFC: Přístup na data II DDV: Dialog Data Validation kontrola správnosti dat délka řetězce: DDV_MinMax* rozsah číselné hodnoty: DDV_MaxChars oznámení chyby: CDataExchange::Fail nastavení focusu na ovládací prvek s chybou vyhození výjimky: CUserException zachycení: zobrazení message boxu MFC 13
CommonDialogs vždy modální s jednou výjimkou vlastní obsluha (funkce) dialogu vstup dialogu: struktura nutno nastavit velikost struktury: lstructsize nutno nastavit příznaky: Flags ovlivnění schopností a složek struktury návratové hodnota TRUE: uživatel zvolil tlačítko OK hodnoty dialogu: předaná struktura FALSE: uživatel dialog zrušil selhání dialogu: chyba CommDlgExtendedError Win32API 14
CommonDialogs: Souborové soubor pro vstup kontrola existence vybrané cesty výběr více souborů funkce GetOpenFileName soubor pro výstup možnost kontroly na existenci vybrané cesty a souboru dotazu, zda soubor přepsat funkce GetSaveFileName Win32API 15
CommonDialogs: Vzhledové výběr barvy určení vybrané barvy určení volitelných barev zamezení vytvoření vlastní barvy funkce ChooseColor výběr písma výběr fontů dostupných na zařízení dle DC vrací: LOGFONT funkce ChooseFont Win32API 16
CommonDialogs: Textové nemodální návratová hodnota: handle okna dialogu vysílá zprávu vlastníkovi ID zprávy: nutno zjistit RegisterWindowMessage(FINDMSGSTRING) reakce na zadání vyhledání / nahrazení uzavření dialogu funkce FindText / ReplaceText Win32API 17
CommonDialogs: Tiskové nastavení tisku výběr tiskárny stránek pro tisk počet kopií funkce PrintDlg nastavení stránky tiskárny pro výstup okrajů stránky jednotky: milimetry, palce dle nastavení systému funkce PageSetupDlg Win32API 18
Další dialogy: Výběr adresáře vrací strukturu identifikátoru adresáře nutno přeložit: SHGetPathFromIDList nutno explicitně dealokovat rozrhanní IMalloc: SHGetMalloc možnost filtrovat adresáře (WinXP) vytvářet adresáře funkce SHBrowseForFolder nutné shlobj.h, shell32.lib Win32API 19
Okno okno = třída System.Windows.Forms Control základní třída pro všechna okna specializace: jednotlivé ovládací prvky UserControl určeno pro vytváření vlastních ovládacích prvků Form samostatné okno zpravidla hlavní okno aplikace též funkcionalita dialogu.net 20
Okno: Události zpráva = vyvolání události obsluha události okno neobsluhuje jiné události vytvoření obsluhy registrování události doporučený způsob parametry: původce + parametr dle události přetížení funkce On- nedoporučený způsob vhodné pro odstínění události vhodné zavolat implementaci v předku nevyvolání: nevygenerování události.net 21
Okno: Smyčka událostí standardní metoda Application.Run forma nemusí být viditelná ukončení uzavření hlavního okna Application.Exit idle nahrazení části metody Run MyForm form = new MyForm(); form.show(); while (form.created) { form.dosomethinguseful(); Application.DoEvents(); }.NET 22
Okno: Vytvoření okna vytvoření instance třídy konstruktor třídy vytvoření potomků registrace událostí vhodné blokovat událost změny rozložení první zobrazení okna dodatečné nastavení okna událost Load detekce vytvořeného okna property Created.NET 23
Okno: Zrušení okna události uzavření okna požadavek na uzavření lze odmítnout užití: otázka Are you sure? událost Closing oznámení o uzavření okno nelze přímo obnovit událost Closed nevyvoláno při Application.Exit programově běžné okno: funkce Close znovupoužitelná okna: skrytí okna (Hide).NET 24
Okno: Vztahy mezi okny rodič-potomek ovládací prvky nastavováno automaticky rodič: property Parent potomci: Controls užití: přidávání ovládacích prvků hlavní okno: nevyšší rodič property TopLevelControl vlastník-vlastněný dialogy property Owner / OwnedForms.NET 25
Okno: Základní vlastnosti aplikováno zpravidla na potomky generují patřičnou událost (event) možnost dvojce událostí: před a po před: možnost odmítnutí operace povolení okna: Enabled zobrazení okna: Visible též Show/Hide aktivace okna: Select přesunutí do popředí a získání focusu titulek okna: Text.NET 26
Okno: Rozmístění potomků automaticky zamknutí okraje vzhledem k okraji rodiče property Anchor možné kombinace okrajů přilepení k okraji: nelze kombinovat property Dock dle hloubky (z-order) ručně: událost Layout nastavení ovladacích prvků reakce na událost Resize změna: vhodné zamezit obsluhu SuspendLayout / ResumeLayout.NET 27
Okno: Pozice změna: událost nastavení okrajů okna property Bounds levý horní roh: Location možno užít též pro počáteční pozici počáteční pozice property StartPosition zpravidla pro dialogy aplikace: při zobrazení automaticky ručně (Location).NET 28
Okno: Velikost velikost okna: Size velikost klientí plochy: ClientSize volá SetClientSizeCore: lze přetížit detekce změny velikosti: Resize generuje požadavek na změnu rozložení maximální rozměry okna MinimumSize / MaximumSize stav okna: WindowState maximalizace/minimalizace.net 29
Okno: Vzhled I barva: Fore/BackColor ovlivňuje vykreslování všech potomků systémové barvy: struktura SystemColors nastavení okraje: FormBorderStyle ovlivňuje schopnost měnit velikost možnost zakázání okraje pořadí hloubky primárně: dle pořadí přidávání změna za běhu: BringToFront / SendToBack vždy v popředí: TopMost.NET 30
Okno: Vzhled II uživatelský tvar okna možno nastavit libovolný tvar: Region vytvořeno složením křivek možno zprůhlednit části: TransparencyKey průhledná barva: bez reakce na myš průsvitnost okna: Opacity podpora pro témata implicitně: standardní Win2k vzhled povolení: Application.EnableVisualStyles zobrazení v liště: ShowInTaskBar vhodné pro dialogy.net 31
Okno: Focus implicitní uživatelský vstup zjištění focusu daného okna: Focused včetně potomků: ContainsFocus nastavení focusu uživatele reakce na <tab>: property TabStop pořadí reakce na <tab>: property TabIndex programově funkce Focus úspěch nemusí být automatický událost: GotFocus / LostFocus.NET 32
Pokračování příště... děkuji za pozornost příště grafický výstup nezapomeňte nakrmit ryběnky 33