OWL Doc/View lyhykäisesti:
Timo & Vesa Lappalainen -96
Tehdään Doc/View pohjainen ohjelma, joka
piirtää suorakulmion ikkunaan. Ensimmäisessä vaiheessa
piirretään aina vakiokokoinen suorakulmio. Esimerkillä
demonstroidaan View luokan toimintaa yksinkertaisimmillaan. Seuraavassa
vaiheessa liitetään View luokka omaan Doc luokkaan
jolla luetaan suorakulmion koko tiedostosta.
- 1.
- Luo AppExpertillä projekti. Tässä vaiheessa projekti
voi olla joko MDI tai SDI tyyppinen. Anna projektin nimeksi vaikka
Rect. Oletusarvoilla AppExpert luo luokan
TRectEditView, joka on assosioitu TFileDocument luokan
kanssa. TEditView luokan avulla voi esim. editoida tekstitiedostoja.
Tässä esimerkissä ei tätä luokkaa tarvita mutta se
voidaan jättää projektiin toistaiseksi. Muuta myös
projektin compiler defines _OWLPCH -> _OWLALLPCH. Tämä
pienentää precompiled headers - tiedoston kokoa.
- 2.
- Lisää projektiin ClassExpertillä TWindowView
luokasta peritty oma luokka. Anna sille nimeksi vaikka TRectView.
- 3.
- Lisää TRectView tiedostoon vaikka TRectView
Implementation kohdan alapuolelle määrittelyt:
//{{DOC_VIEW}}
DEFINE_DOC_TEMPLATE_CLASS(TFileDocument, TRectView, TRectTemplate);
//{{DOC_VIEW_END}}
//{{DOC_MANAGER}}
TRectTemplate RectTemplate("Rect Files", "*.*", 0, "rect",
dtAutoDelete | dtUpdateDir | dtOverwritePrompt);
//{{DOC_MANAGER_END}}
- 4.
- Lisää ClassExpertillä TRectView:lle
virtuaalimetodin Paint käsittelijä (mene ko. luokan kohdalle
ja valitse oikean puoleisesta ruudusta Virtual Functions ja etsi
tämän alta Paint metodi ja hiiren oikealla napilla Add handler).
- 5.
- Lisää Paint -metodiin rivit:
TRect Rect(50,50,200,200);
dc.Rectangle(Rect);
- 6.
- Käännä ja aja ohjelma. Valitse File/New ja Rect Files.
Näyttöön pitäisi ilmestyä
suorakulmio.
Edellisestä. esimerkistä ei vielä ole
paljoakaan iloa, koska se ei lue mitään tiedostosta.
- 1.
- Lisää ClassExpertillä TFileDocumentista
peritty luokka TRectDocument.
- 2.
- Lisää käsin TRectDocumentin .h:hon (mene
ClassExpertissä ko. luokan kohdalle ja valitse hiiren oikealle
näppäimellä Edit Header)
protected:
TRect Rect;
public:
const TRect &GetRect();
- 3.
- Lisää käsin TRectDocumentin rakentajaan
TFileDocument(parent) perään
,Rect(20,20,100,100)
- 4.
- ja lisää GetRect käsittelijä:
const TRect &TRectDocument::GetRect()
{
return Rect;
}
- 5.
- Lisää TRectView:n sisältävän tiedoston
alkuun: #include "rctdcmnt.h" (tai mikä lieneekään)
- 6.
- Vaihda ensimmäisessä vaiheessa tehdyn RectDoc:n
määrittely:
DEFINE_DOC_TEMPLATE_CLASS(TRectDocument, TRectView, TRectTemplate);
- 7.
- Vaihda samalla myös tarkentimen *.* tilalle *.rct.
- 8.
- Vaihda TRectView:n Paint metodin sisällöksi:
TWindowView::Paint(dc, erase, rect);
TRectDocument *RectDoc=TYPESAFE_DOWNCAST(Doc,TRectDocument);
dc.Rectangle(RectDoc->GetRect());
- 9.
- Käännä ja aja ohjelma. Muista valita tiedoston avauksessa
alempi vaihtoehto dokumentin tyypille (Rect Files *.rct).
Näyttöön pitäisi ilmestyä TRectDocumentin
rakentajassa luotu 80x80 suorakulmio.
Esimerkkimme ei vieläkään lue tiedostosta mitään mutta
nyt voidaan helposti lisätä TRectDocumenttiin
käsittelijät.
- 1.
- Lisää ClassExpertillä ensin
TRectDocumenttiin virtuaalimetodi Open.
- 2.
- Editoi Open käsittelijän sisällöksi:
{
TInStream* is = InStream(ofRead);
if (!is) return false;
*is >> Rect;
delete is; // En tieda pitääkö/saako tuhota!
SetDirty(false);
return true;
}
- 3.
- Editoi GetRect sisällöksi:
{
static TRect errRect(0,0,50,50);
if (!IsOpen() && !Open(ofRead | ofWrite)) return errRect;
return Rect;
}
- 4.
- Luo tiedosto eka.rct, joka sisältää esimerkiksi rivin:
(50,50,200,200)
- 5.
- Käännä ja aja ohjelma. Muista valita tiedoston avauksessa
alempi vaihtoehto dokumentin tyypille (Rect Files *.rct).
Näyttöön pitäisi ilmestyä eka.rct:ssä
määritelty suorakulmio tai jos valitaan New tiedosto,
GetRect:ssä määritelty (avaus epäonnistui)
suorakulmio.
Tämän jälkeen voi hommaa lähteä
kehittämään. Nyt voi turvallisesti luoda projektin vaikka
uudelleen MDI:nä ja lisätä käsin äsken luodut
TRectView ja TRectDocument tiedostot projektiin (muista ajaa
rescan).