Paskaitų konspektai 9

Download Report

Transcript Paskaitų konspektai 9

Išteklių scenarijai
(resource scripts)
rc.exe
• Windows SDK turi specialų įrankį – rc.exe,
išteklių scenarijų kompiliatorių (resource
script compiler).
• Tai galinga programavimo Windows dalis,
kurią geras programuotojas turėtų išmanyti
ir naudoti.
Kas tai yra?
Tai failas, talpinantis GVS (GUI) duomenis,
ir, kai sukompiliuotas, gali būti susietas su
programa. Tuomet programa gali
pasinaudoti duomenimis saugomais
scenarijuje. (Pvz.: versija, piktograma ir
pan.)
Išteklių tipai
•
•
•
•
•
•
•
•
•
Išskleidžiamasis meniu (drop-down menu)
Iškylantis meniu (popup menu)
Tekstinės eilutės
Spartieji klavišai (keyboard accelerators)
Piktogramos (icons)
Rastriniai paveikslai (bitmap images)
Dialogo langai (dialog boxes)
Versijos informacija
Pelės kursoriai
Kuriant scenarijus...
• Scenarijų rašymo sintaksė yra labai panaši į
C. Pavyzdžiui, scenarijų kompiliatorius
naudoja standartinį C parengiamąją doroklę
(preprocessor). Svarbu atkreipti į tai dėmesį,
nes reikia įtraukti <afxres.h> antraštinį failą į
scenarijų.
• Kadangi scenarijuose galima rašyti makro
komandas, labai dažnai programuotojai
saugo susijusias makro komandas
antraštiniame faile “resource.h”.
Naudojant scenarijus...
• Kai scenarijus yra išsaugomas vykdomajame
faile, egzistuoja keli būdai juo pasinaudoti.
Pavyzdžiui, norint kreiptis į eilutę,
naudosimės LoadString funkcija, atitinkamai
kreipiantis į piktogramą – LoadIcon.
• Tam, kad galėtumėt kreiptis į scenarijų, reikia
žinoti vykdomojo failo identifikatorių (instance
handle). Kas būtų, jei gautume kito
vykdomojo failo identifikatorių?
MAKEINTRESOURCE
• Dirbant su scenarijais šis raktinis žodis yra
labai svarbus. Kaip jis veikia?
• Ištekliai saugomi su vardu, kuris gali būti tiek
eilutė, tiek skaitinis identifikatorius. Skaitiniu
atveju, skaičius negali būti didesnis nei 16
bitų, bet į išteklius tai kreipiamasi vardu –
unikodine eilute... Tam, kad skaitinis
identifikatorius nebūtų sumaišytas su eilute,
yra perduodama makrokomanda
MAKEINTRESOURCE, kuri pakeičia skaičių į
atitinkamą eilutę.
Išteklių identifikatoriai
•
•
•
•
•
•
•
•
IDS – eilutės tipo
IDM – meniu
IDC – komandos
IDD – dialogo lango
IDA – prieigos klavišų lentelės
IDI – piktogramos arba rastrinio vaizdo
IDB – rastrinio vaizdo
ID – nežinomo tipo
DISCARDABLE
• Ištekliai yra įkeliami į atmintį dirbant
programai. Tačiau programa gali jų
nenaudoti kurį laiką, todėl būtų prasminga
juos (arba jų dalį) pašalinti iš atminties.
Tam tikslui yra naudojamas raktažodis
DISCARDABLE apibrėžiant išteklių.
• Šis raktažodis 32 bitų Windows sistemose
yra ignoruojamas, bet likęs suderinamumo
tikslais.
Piktogramos
• Piktogramos gali būti saugomos išteklių
faile naudojant raktažodį ICON:
• Programos vykdomasis failas bus
rodomas su pirmąja piktograma, jei jų yra
keletas:
• Antraštinis failas apibrėžiamas:
• Įkėlimas piktogramos iš vykdomojo failo
žinant jo identifikatorių:
• Arba tą patį galime gauti panaudoję eilutės
tipą:
• WNDCLASSEX turi dviejų piktogramų
identifikatorius: didelės ir mažos. Mažą
piktogramą sudaro 16 taškų kvadratas,
didelę – 32. Jei nėra pateiktas mažos
piktogramos identifikatorius – didelė
piktograma yra sumažinama.
• Jei funkcijai yra perduodamas objekto
identifikatorius NULL, Windows’ai grąžins
numatytąją piktogramą.
Rastriniai paveikslėliai (bitmaps)
• Rastriniai paveikslėliai gali būti iškviečiami taip
pat kaip ir piktogramos:
• Kadangi “bitmapai” yra dideli, Windows’ai gali
grąžinti NULL reikšmę.
• Taip pat juos reikia pašalinti iš atminties
perduodant identifikatorių funkcijai
DestroyObject.
Pelės žymekliai
Pelės žymekliai apibrėžiami panašiai kaip
ir piktogramų atveju ir įkeliami funkcijos
LoadCursor pagalba.
Simbolių eilučių lentelės
• Simbolių eilutės gali būti aprašomos taip:
• Pastebėsime, kad galima naudoti ir BEGIN
END vietoje { }. Kompiliatoriui tai neturi
jokios reikšmės.
• Lentelė įkeliama funkcijos LoadString pagalba:
• hInst – bibliotekos, talpinančios eilutę,
identifikatorius
• uID – simbolių eilutės identifikatorius
• lpBuffer – simbolių masyvo kintamasis, kuris įgis
eilutės reikšmę
• nBufferMax – nurodo, kiek simbolių gali būti
įkelta
Pati funkcija grąžina nuskaitytų simbolių kiekį.
Prieigos klavišai (accelerators)
Prieigos klavišai yra įprasta beveik visų
taikomųjų programų dalis, todėl jų
sukūrimas scenarijuose yra gera idėja.
Priegos klavišų lentelė atrodo taip:
Pavyzdžiai
Klavišų kombinacijos apibrėžiamos kaip
simboliai arba virtualaus klavišo kodo
reikšmė:
VIRTKEY - virtualių klavišų kodo
identifikatoriai
Jei prieigos klaivišus susiesime su meniu
komandomis, tuomet, paspaudus prieigos
klavišą, išryškės meniu komanda. Nebent
nurodytume raktažodį NOINVERT:
LoadAccelerators
Norint įkelti prieigos klavišus, naudosimės
funkcija LoadAccelerators:
TranslateAccelerator
Tam, kad programa “suprastų” priegos
klavišų reikšmes, reikia pakeisti pranešimų
ciklą. Jame panaudosime
TranslateAccelerator funkciją,
pakeičiančią klavišų reikšmes atitinkamais
komandiniais pranešimais:
• Tuo atveju, kai rašoma daugelio
dokumentų sąsajos (MDI) programa, reikia
taip pat reaguoti į polangių prieigos
klavišus. Tam naudosimės
TranslateMDISysAccel funkcija:
• hwndFrame – programos lango ID
• hwndClient – MDI programos lango ID
Meniu
Ampersendas (&)
Versijos informacija ir dialogai
• Versijos informacija saugoma išteklių faile.
• Dialogo lango pavyzdys:
• Jei dialogo langas nėra susiejamas su
klase, tuomet laukas CLASS nėra
užpildomas