Dialogo langai

Download Report

Transcript Dialogo langai

Dialogo langai
Tipai:
• Modalinis
• Sistemos modalinis
• Nemodalinis
Pranešimo langas
Keturi MessageBox funkcijos parametrai:
1.Viršlangio valdiklis (handle)
2.Pranešimas
3.Antraštė
4.Parinktis (option)
Mygtukai
• MB_ABORTRETRYIGNORE
• MB_CANCELTRYCONTINUE (nuo Win
2000)
• MB_OK
• MB_OKCANCEL
• MB_RETRYCANCEL
• MB_YESNO
• MB_YESNOCANCEL
• MB_HELP
Piktogramos
•
•
•
•
•
•
•
•
MB_ICONEXCLAMATION
MB_ICONWARNING
MB_ICONINFORMATION
MB_ICONASTERISK
MB_ICONQUESTION (nerekomenduojamas)
MB_ICONSTOP
MB_ICONERROR
MB_ICONHAND
Modalumas
• MB_APPLMODAL (numatytasis)
• MB_SYSTEMMODAL
• MB_TASKMODAL
• Pastaba. Daugiau informacijos žr. MSDN
Dialogo lango procedūros
Kuo skiriasi nuo paprasto lango?
BOOL vietoje LRESULT
Neturi numatytosios pranešimų apdorojimo funkcijos
WM_INITDIALOG
EndDialog
Modalūs dialogo langai
• Apibrėžus dialogo lango procedūrą, dialogo langą
galima sukurti DialogBox arba DialogBoxParam
funkcijomis. Šios funkcijos grąžina NRESULT
reikšmę (sveikąjį skaičių), kuris perduodamas
EndDialog funkcijai.
• Tokie dialogo langai iš esmės turi 2 valdiklius:
paties dialogo ir viršlangio.
• Norint perduoti parametrą dialogui, galima naudoti
DialogBoxParam funkciją, kuri turi penktą
argumentą (32 bitų rodyklę). Ši reikšmė
perduodama kaip WM_INITDIALOG pranešimo
LPARAM elementas.
Netiesioginiai dialogo langai
Tiek DialogBox, tiek DialogBoxParam
reikalauja dialogo lango apibrėžimo
ištekliuose. Visdėlto, galima apsibrėžti
dialogo langą esant reikalui naudojantis
DialogBoxIndirect arba
DialogBoxIndirectParam funkcijomis.
Tam reikia užpildyti DLGTEMPLATE
struktūrą ir perduoti funkcijai rodyklę į ją.
DLGITEMTEMPLATE struktūra skirta
individualiems dialogo langams apibrėžti.
Nemodalūs dialogo langai
Jie yra kitos “rūšies” ir daugiau primena langus, nei
dialogus. Iš pradžių reikės modifikuoti pranešimų ciklą jų
tvarkingam atpažinimui, o vėliau dialogus galima sukurti
naudojantis klase arba be jos:
Be klasės
Išteklių scenarijuje apibrėžiam dialogo
langą raktažodžio DIALOG pagalba ir...
Viskas?!
Taip, kadangi išteklius turi savo ID, kuris
perduodamas funkcijai CreateDialog.
Su klase
Tam, kad palengvinti sau darbą, reikia
apsibrėžti WNDCLASS struktūrą su
dialogo lango duomenimis. Vienintelis
skirtumas tas, kad:
Užregistruojam klasę kaip paprastą
langą... ?!
• Tegul mūsų klasės vardas būna
“ManoDialogoKlase” (tai svarbu).
• Apsirašome išteklių:
• Dabar, užuot naudoję CreateWindow,
naudosimės CreateDialog funkciją!!
Pabaigai
Nieko nuostabaus, kad norint sunaikinti
tokį dialogo langą bus kviečiama
“DestroyWindow” funkcija vietoje
“EndDialog”.
Bendrieji dialogo langai
• Daugkartinis panaudojamumas (pvz.:
“Atidaryti failą”).
• Kiekvienas bendrasis langas turi vienintelę
funkciją, kuriai perduodama rodyklė į
struktūrą. Juos galima prijungti prie
projekto įtraukiant antraštės failą
<commdlg.h> ir susiejant su comdlg32.dll
biblioteka.
Pavyzdžiai
Dialogo lango ištekliai
WS_TABSTOP – nurodo ar paspaudus
TAB klavišą objektas bus pažymėtas (eilės
tvarka svarbi).