Dokumentit, näkymät ja kehykset
|
|
- Ari-Matti Lattu
- 8 vuotta sitten
- Katselukertoja:
Transkriptio
1 OSA III 249 LUKU LUKU Single document interface sovelluksen luominen MFC:n dokumentti-näkymä rakennetta hyödyntävän sovelluksen kehittäminen Dokumentti-, näkymä-, kehys- ja dokumenttimalliluokat Lisäalkioiden lisääminen vakiovalikkoon
2 250 Mitä dokumentti oikein tarkoittaa? Ensimmäinen dokumentti/näkymä -arkkitehtuuria käyttävä sovellus oli MS Word -tekstinkäsittelyohjelma. Dokumentti-termin (tai Asiakirjan) ei tarvitse rajoittua tähän perinteiseen määrittelyyn. Document-luokassa voi olla mitä tahansa tietoa, jolloin dokumentti/näkymä -arkkitehtuuria voidaan soveltaa mitä erilaisimpiin sovelluksiin. Sovelluksen osat Auton tuotekehitykseen uhratut miljardit ovat saaneet aikaan autoihin varsin vakiintuneen käyttäjäliittymän. Tästä syystä voit siirtyä autosta toiseen ja olet tien päällä minuuteissa. Kun ajamisen perustaidot on kerran hankittu, niiden käyttö uudessa, melkein samanlaisin, korkeintaan ulkonäöltään poikkeavin, hallintalaittein varustetussa autossa. Windows-sovellusten suosio perustuu myös paljon yhtenäisen ulkoasun konseptiin. Tyypillisessä Windows-sovelluksessa on ylinnä otsikkopalkki, jonka alla ovat valikkorivi ja mahdolliset työkalurivit toimien pikavalintoina valikon komentoihin. Työkalurivien alla on ohjelman varsinainen näyttöalue ja aivan alimmaisena on vielä tilarivi. Vaikka sovellukset kuinka poikkeaisivat toisistaan, on niissä yleensä tietyt samat valikon komennot ja työkalurivin painikkeet. Tämä on mahdollistanut siirtymisen tekstinkäsittelyohjelmasta sähköpostin käyttöön muutaman minuutin opiskelulla. Visual C++ -ohjelmoijalla näiden Windows-standardien noudattaminen käy varsin vaivattomasti. MFC-kirjasto tarjoaa valtavan määrän apua jo sovelluksen luomisessa: AppWizard osaa lisätä sovellukseen automaattisesti valikon, työkalurivit, tilarivin ja muita komponentteja. Luomisen jälkeen näitä sovelluksen osia voidaan sitten vielä muokata lisää. AppWizardin luomat luokat toimivat yhdessä muodostaen MFC:lle ominaisen dokumentti/näkymä arkkitehtuurin. Dokumentti/näkymä arkkitehtuurin perusajatus on erottaa sovelluksen data sen esittämisestä käyttäjälle. Tämä saavutetaan eristämällä sovelluksen data omaan luokkaansa (dokumenttiin) ja esittämällä sen perusteella tietoja käyttäjälle toisen luokan kautta (näkymä, view). MFC-kirjaston tarjoama kokonaisuus on paljon muutakin kuin tämä sovellusrunko. Siihen kuuluu useita käyttäjäliittymäominaisuuksia sekä keinot tallettaa ja lukea tietoja tiedostoista. Dokumentti/näkymä arkkitehtuuri jakaantuu kahteen erilaiseen toteutukseen SDI, yksi dokumenttirajapinta ja MDI, monidokumenttirajapinta. Tässä luvussa keskitymme SDI:hin. KATSO MYÖS Lisätietoja MDI-sovelluksista luvussa 21. SDI-sovelluksen luominen Tyypillisen Windows-sovelluksen luominen tuttuine näkyvine ominaisuuksineen, kuten työkalurivit ja tilarivi, saattaisi olla varsin
3 haastavaa, ellei käytössä olisi AppWizardin kaltaista työkalua. AppWizard menee itse asiassa vielä perusasioita pidemmälle saat siihen valinnaisesti lisäominaisuuksia. Eräs näistä on mahdollisuus tietokantaliittymän tekemiseen, toinen sähköpostitoimintojen liittäminen sovellukseen. Tässä luvussa teet SDI-sovelluksen, jonka avulla tutkimme luotuja luokkia sekä dokumentti/näkymä arkkitehtuurin toimintaa. Luo siis aluksi projekti nimeltä SDICoin. OSA III LUKU SDI-sovelluksen luominen AppWizardilla 1. Valitse File-valikosta New. Valitse sitten New project valintaikkunassa Projects-välilehdeltä MFC AppWizard (exe). 2. Anna projektille nimi (tässä SDICoin) ja napauta OK. 3. Valitse MFC AppWizard Step1 ikkunassa Single Document valintapainike ja varmista, että Document/View Architecture Support? on valittuna (kuva 12.1). Napauta Next-painiketta. KUVA 12.1 AppWizard, vaihe Valitse Step 2 ikkunassa None-valintapainike. Tällä sivulla voisit halutessasi liittää sovellukseen tietokantatukea, mutta juuri nyt emme sitä tarvitse. Napauta siis Next-painiketta. 5. Valitse Step 3 ikkunassa None-valintapainike ja rastita ActiveX Controls valintaruutu. Ikkunan muut valinnat liittyvät tässä esimerkissä tarpeettomiin OLE-automaatio-ominaisuuksiin. Napauta Next. 6. Rastita Step 4 ikkunassa seuraavat valinnat: Docking Toolbar, Initial Status Bar, Printing and Print Preview ja 3D
4 252 Sovelluksen osat Controls. Valitse työkalurivin tyyli Normal-valintapainikkeella. Tarkista asetukset vielä kuvasta Napauta Next. KUVA 12.2 AppWizard, vaihe Valitse Step 5 ikkunassa projektin tyyliksi MFC Standard, hyväksy englanninkieliset kommentit lähdekoodiin Yes-valinnalla ja valitse MFC-kirjasto käytettäväksi As a Shared DLL tyyliin. Napauta sitten Next. 8. Napauta Step 6 ikkunassa Finish. Saat esiin kuvan 12.3 mukaisen New Project Information -ikkunan. Tässä ikkunassa on tietoja luoduista luokista ja lähdekooditiedostojen nimistä. Voit myös tarkistaa, mitkä ominaisuudet sovellukseen otettiin. Napauta OK. Nyt uuden projektin pitäisi olla valmis ja avattuna Developer Studiossa. KUVA 12.3 New Project Information valintaikkuna.
5 OSA III LUKU Tulet esittämään valmiissa sovelluksessa kolikkopinon. Valikosta voit valita kolikon lisättäväksi tai poistettavaksi pinosta. Sovelluksen tiedot, tässä siis vain kolikoiden lukumäärä, pidetään dokumenttiluokassa ja niitä käsitellään näkymäluokan kautta tarkoituksena on näyttää kolikkopino. Vaikka tämä on varsin yksinkertainen esimerkki, osannet sen jälkeen antaa arvoa dokumentti/näkymä arkkitehtuurin perustavoitteelle, joka on tiedon paketointi (encapsulation). Paketoituna sovelluksen tiedot talletetaan ainoastaan dokumenttiluokkaan ja luokka tarjoaa tiedon käsittelyyn omat saantifunktionsa, jotta näkymäluokka (view) voi esittää tiedot käyttäjälle sopivassa muodossa. Esimerkiksi kolikkopinokuvan esittämisen sijaan näkymäluokka voi esittää tiedon kolikoiden määrästä pelkkänä numerona, eikä dokumenttiluokkaan tarvitse tehdä tätä varten muutoksia. Ennen kuin käymme projektin paranteluun käsiksi, lienee tarpeen tutustua AppWizardin tekemiin luokkiin hieman tarkemmin. SDI-sovelluksessa on yksi dokumenttiluokka, joka on johdettu MFC:n CDocument-kantaluokasta sekä yksi näkymäluokka, joka voidaan johtaa jostain MFC:n näkymäluokasta. Eri näkymäluokat heijastelevat erityyppisten dokumentti/näkymä-arkkitehtuurin ympärille perustuvien sovellustyyppien eroa. AppWizardin vaiheessa 6 on valittu perusnäkymäluokka. Taulukossa 12.1 on esitetty valittavissa olevat luokat; SDICoin käyttää näistä oletusluokkaa CView. TAULUKKO 12.1 AppWizardista käytettävissä olevat näkymäkantaluokat Luokan nimi CView CScrollView CListView CTreeView CEditView Kuvaus Oletusluokka, joka toteuttaa kaikki näkymään tarvitta vat perusfunktiot, myös toiminnan dokumenttiluokan kanssa. CView-luokasta johdettu luokka, johon on lisätty vieritysmahdollisuus, kun näkymän looginen alue on käytettävissä olevaa fyysistä näyttöalaa suurempi. Käyttää näkymänä luettelokontrollia, jossa sovellus voi esittää kuvakkeita tai tekstisarakkeita. Käyttää näkymänä puukontrollia, jossa sovellus voi esittää tietoa hierarkkisessa muodossa. Käyttää näkymänä monirivistä tekstiruutua, jossa ovat mukana vierityspalkit sekä hakujen käyttömahdollisuus. Dokumentti paketoi sovelluksen tiedot Dokumenttiluokka on johdettu CDocument-kantaluokasta ja sen jäsenmuuttujissa pidetään sovelluksen tietoja. Johdetun CDocument-luokkasi jäsenfunktioilla päästää käsittelemään noita tietoja. Esimerkiksi Serialize()-funktiota käytetään tietojen lataamiseen levyltä ja tallentamiseen sinne.
6 254 Sovelluksen osat Luokan nimi Kuvaus CRichEditView Käyttää näkymänä rich edit -kontrollia, jossa tekstin muokkausmahdollisuudet ovat tekstiruutuakin paremmat. CFormView Käyttää näkymänä valintaikkunapohjaa, jolloin sovellus voi esittää tietonsa tietokantalomakkeena. CRecordView CFormView-luokasta johdettu näkymä, jota on parannettu mahdollisuudella kytkeytyä joukkoon tietokannan tietueita. Tämä luokka on käytettävissä vain, jos sovellusta luodessa on valittu käytettäväksi tietokantatukea. CHtmlView Auttaa luomaan webbiselainsovelluksia Internet Explorer näkymän avulla. KATSO MYÖS Lisätietoja CListView, CTreeView, CRichEditView ja CHtmlView-luokista luvusta 19. Tietoja CScrollView-luokasta luvusta 18. Tietoja CFormView- ja CRecordView-luokista luvusta 24. Lisätietoja tiedostokäsittelystä dokumentti/näkymä-arkkitehtuurissa luvusta 23. Lisätietoja tietokantatuen käyttämisestä luvusta 24. Tietoja OLE automaatiosta luvusta 25. SDI-sovelluksen luokat SDI-sovelluksen luokkarakenne poikkeaa valintaikkunasovelluksesta selvästi. Jos tutkit SDICoin-projektin ClassView-ikkunaa, huomaat AppWizardin luoneen neljä luokkaa käsittelemään sovelluksen rakennetta. Näiden luokkien sukulaisuussuhteet selviävät kuvasta 12.4.
7 OSA III LUKU KUVA 12.4 SDI-sovelluksen luokkahierarkia. CWinApp-kantaluokasta johdetulla CSDICoinApp-luokalla on useita rooleja ja sen toteutus poikkeaa valintaikkunaprojektin sovellusoliosta. Luokka hallitsee sovelluksen alustamista. Se vastaa liitynnästä dokumentti-, näkymä- ja kehysluokkien välillä. Se vastaanottaa myös Windowsin sanomat ja ohjaa ne edelleen oikeaan kohdeikkunaan. Kuten aiemmin todettiin, SDI-sovelluksessa luodaan ainoastaan yksi CDocument-luokasta johdetun CSDICoinDoc-luokan olio. Tämä luokka tulee toimimaan sovelluksen tietosäilönä. Sovelluksen tieto voi toki olla missä tahansa muodossa: kolikkoesimerkissämme ei tarvita muuta kuin kolikoiden lukumäärä, mutta usein sovelluksen tarvitsemat tiedot ovat huomattavasti mutkikkaampia. Tekstinkäsittelyohjelmassa sovelluksen tiedot koostuvat asiakirjan tekstisisällöstä sekä siihen kohdistetusta muotoilusta ja CAD-sovelluksessa käsiteltävän kuvan osien koordinaateista. CObject on hyvä kantaisä CObject on melkein kaikkien MFC-kirjaston luokkien kantaluokka. Kaikki CObjectluokasta johdetut luokat osaavat tarkistaa olion luokan ohjelman ajon aikana, tulostaa diagnostiikkatietoa ja tukea serialisointia.
8 256 Sovelluksen osat Tiedontallennustapa dokumenttiin on täysin sovelluksen ohjelmoijan käsissä. Ihanteellisin tapa olisi käyttää oliolähestymistapaa, jolloin itse tiedot ovat täysin erillään käyttöliittymästä. Tällä tavoin koodista saadaan mahdollisimman siirrettävä ja joustava. Kolikkoesimerkissä näkymiä on vain yksi, mutta joskus saatat tarvita niitä useita ja vieläpä saman dokumentin tietojen käsittelyyn. Elleivät näkymät ole samantyyppisiä, tulee dokumenttiluokkaan suunnitella tarkkaan, millaisena tieto näkymälle lähetetään. Kehysikkunan tyylien muokkaminen Voit muuttaa pääkehysikkunan tyylejä ennen sen piirtämistä korvaamalla PreCreateWindow()- funktion. Tälle funktiolle välitetään viittaus CREATESTRUCT-tietorakenteeseen, jossa styleattribuutti sijaitsee. Voit muuttaa sitä ennen tietorakenteen välittämistä edelleen kantaluokan versiolle funktiosta. CSDICoinView-luokka vastaa dokumentin tietojen näyttämisestä käyttäjälle sekä käyttäjän toimien välittämisestä dokumentin tietoihin. Kukin näkymä voi käsitellä vain yhtä dokumenttia, mutta yhdellä dokumentilla voi olla useita näkymiä. Näkymäluokka saa tietonsa dokumentista dokumenttiluokan jäsenfunktioilla. CMainFrame-luokka antaa sovelluksen käyttöön ikkunan. Luokka periytyy CFrameWnd-kantaluokasta, joka on yksinkertaisen ikkunan toiminnot paketoiva luokka. Oletuksena ikkunan tyylimäärittelyissä on mukana WS_OVERLAPPEDWINDOW, jolloin kehysikkuna saa otsikkopalkin painikkeineen, järjestelmävalikon ja mahdollisuuden tulla siirrettäväksi tai suurennettavaksi/pienennettäväksi käyttäjän toimesta. Kehysikkunan tyyleihin kuuluu myös FWS_ADDTOTITLE, jolloin ikkunaan ladatun dokumentin nimi tulee ikkunan otsikkopalkkiin. CMainFrameluokka osaa myös käsitellä työkalu- ja tilarivien luomisen, alustamisen ja tuhoamisen. KATSO MYÖS Lisätietoja SDI- ja MDI-luokkien eroista luvussa 21. SDI-sovelluksen näkyvät osat Kun AppWizardin ikkunassa Step 4 hyväksytään SDI-sovellusta luotaessa oletusasetukset, saadaan sovellus, jossa ikkunalla on otsikkopalkki painikkeineen, valikko tulostus- ja esikatselumahdollisuuksineen, työkalurivi sekä tilarivi. Kaikki näistä eivät suinkaan ole pakollisia; valinnat näkyvät tarkemmin kuvassa Lisää valintoja voidaan tehdä vaiheen 4 valintaikkunan Advancedpainiketta napauttamalla (kuva 12.5). Näillä voidaan räätälöidä vielä kehysikkunan tyyliä.
9 OSA III LUKU KUVA 12.5 AppWizardin vaiheen 4 lisäasetukset (Advanced Options). Kehysikkunan työalue ei tarkkaan ottaen toteuta sovelluksen näkymää. Näkymällä on aivan oma, reunaton ja valikoton kehysikkunan lapsiikkuna. Nämä näkymäikkuna korvaa kehysikkunan koko työalueen (kuva 12.6). Näkymä on toteutettu näin, jotta sama malli olisi hyödynnettävissä sekä SDI- että MDI-sovelluksissa, tosin MDI-sovelluksella on eri luokat kehys- ja lapsi-ikkunoille. Juuri kehysikkuna saa kehysikkuna- ja valikkosanomat Kehysikkunan sanomat Tiettyjä sanomia lähetetään ainoastaan kehystetyille ikkunoille. Näitä ovat koon muuttaminen, siirtäminen, ikkunan pienentäminen tai suurentaminen ja sovellusikkunan työalueen ulkopuolelle kohdistuvat sanomat. KUVA 12.6 SDI-sovelluksen näkyvät osat. 1 CMainFrame 2 CToolbar 3 CSDICoinView 4 CStatusBar 5 Näkymäikkuna 4 3 Ikkunan osat ovat siis seuraavat: CMainFrame. Periytyy CFrameWnd-luokasta ja tarjoaa sovellukselle kehysikkunan. CToolbar. Toteuttaa kehysikkunaan telakoidut työkalurivit. CSDICoinView. Toteuttaa näkymän kehysikkunan lapsiikkunana.
10 258 Sovelluksen osat CStatusBar. Tekee kehysikkunaan liitetyn tilarivin. Näkymäikkuna. Korvaa kehysikkunan työalueen. Mistä ihmeestä valikko ja työkalurivi sitten ilmestyivät? Nämä ovat AppWizardin sovellukseen tuomia resursseja. Jos tutkit projektisi ResourceView-sivua, löydät siitä neljä IDR_MAINFRAME-nimistä resurssia (pikavalintataulukko accelerator, kuvake icon, valikko menu ja työkalurivi toolbar). Pääset muokkaamaan näitä resursseja kaksoisnapauttamalla resurssin tunnusta. Mukana on myös erikoinen IDR_MAINFRAME-niminen merkkijonotaulukko (string table). Tämän taulukon merkkijono jakautuu seitsemään rivivaihdon (\n) erottamaan osaan. Kukin osista vastaa sovelluksen dokumentin tiettyä attribuuttia, ensimmäinen esimerkiksi sovelluksen ikkunan otsikkoa. SDI-dokumenttimallit Toistaiseksi olemme keskittyneet dokumentti/näkymä-sovelluksen yksittäisiin luokkiin ja näkyviin ominaisuuksiin. Kaikki nämä kokoaa yhteen ja niitä hallitsee dokumenttimalliluokka (document template). Jo kuvasta 12.4 löydät CSingleDocTemplate:n SDI-sovelluksen luokkahierarkiasta. Kyseessä on juuri SDI-sovelluksen käyttämä dokumenttimalliluokka. CSingleDocTemplate-luokan ilmentymä luodaan ja sitä käytetään CSDICoin::InitInstance-funktiossa (listaus 12.1). MFC-sovellusrunko kutsuu InitInstance-funktiota juuri ohjelman suorituksen alussa sovelluksen alustamiseksi. 1 MFC kutsuu tätä ohjelman suorituksen alussa. 2 Alustaa dokumenttimallin resurssitunnuksella sekä dukumentti-, kehys- ja näkymäluokalla. LISTAUS 12.1 LST12_1.CPP InitInstance-funktio. 1 BOOL CSDICoinApp::InitInstance() 1 2 { 3 // Tästä on poistettu rivejä selkeyden parantamiseksi 4 // Register the application's document templates. // Document templates 5 // serve as the connection between documents, // frame windows and views. 6 CSingleDocTemplate* pdoctemplate; 7 pdoctemplate = new CSingleDocTemplate( 8 IDR_MAINFRAME, 2 9 RUNTIME_CLASS(CSDICoinDoc), 10 RUNTIME_CLASS(CMainFrame), // main SDI frame window
11 OSA III LUKU RUNTIME_CLASS(CSDICoinView)); 12 AddDocTemplate(pDocTemplate); 13 // Parse command line for standard shell commands, DDE, file open 14 CCommandLineInfo cmdinfo; 15 ParseCommandLine(cmdInfo); 3 16 // Dispatch commands specified on the command line 17 if (!ProcessShellCommand(cmdInfo)) 4 18 return FALSE; 19 // The one and only window has been initialized, so show and update it. 20 m_pmainwnd->showwindow(sw_show); 5 21 m_pmainwnd->updatewindow(); 3 Tulkitsee komentorivin argumentit. 4 Käsittelee komentorivin argumentit ja luo uuden dokumentin tai avaa olemassaolevan tiedoston. 5 Näyttää ja päivittää sovelluksen pääikkunan. 22 return TRUE; 23 } Rivillä 7 luodaan CSingleDocTemplate-olio neljän syötetyn parametrin perusteella. Ensimmäinen näistä on resurssitunnus IDR_MAINFRAME. SDICoin-sovelluksessa IDR_MAINFRAME-tunnuksella viitataan neljään eri resurssiin: sovelluksen kuvakkeeseen, valikkoon, työkaluriviin sekä näppäimistöpikavalintojen taulukkoon. Seuraavat parametrit ovat osoittimia dokumentti-, näkymä- ja kehysluokan ajonaikaisten luokkien tietoihin. Nämä osoittimet tehdään RUNTIME_CLASS-makrolla. Tämä kaikki on mahdollista, koska AppWizard tukee näiden luokkien dynaamista luomista käyttämällä DECLARE_DYNCREATE- ja IMPLEMENT_DYNCREATE makroja. Tässä vaiheessa ei vielä luoda itse dokumentti-, näkymä- tai kehysolioita. Tämä koodi alustaa CSingleDocTemplate-olion tarvittavilla tiedoilla resurssien lataamista varten sekä antaa mahdollisuuden varata tarvittaessa muistia dokumenteille, näkymille sekä kehyksille. Dokumenttimalliluokkaa (document template) kutsutaankin luokkatehtaaksi (class factory). Itse dokumenttimalliluokan oliota säilytetään sovellusluokassa. Rivillä 12 AddDocTemplate-funktiolla rekisteröidään vasta luotu dokumenttimalliolio CWinApp-luokkaan. Luokkatehdasmetodi Dokumenttimalliluokka on esimerkki luokkatehtaasta eli luokasta, joka määrittää, kuinka luodaan ilmentymiä toisista luokista. Näin ollen luokkatehdas osaa tuottaa sovelluskohtaisia luokkien ilmentymiä, olioita. CWinApp-luokka säilyttää CSingleDocTemplate-oliota kunnes se tuhoaa itsensä, eli sovelluksen päättyessä. Tuhoamisen aikana CWinAppvapauttaa dokumenttimallioliolle varatun muistin, joten sinun ei tarvitse huolehtia siitä. KATSO MYÖS Lisätietoja ajonaikaisista luokkatiedoista luvusta 23.
12 260 Omien komentoriviargumenttien tulkitseminen Helpoin tapa käsitellä omat komentoriviargumentit on johtaa luokka CCommandLineInfosta ja korvata ParseParam-funktio. Sovelluksen osat Dokumentti/näkymä-sovellusrungon funktioiden käyttö Dokumentti/näkymä-arkkitehtuurin vaikeimmin ymmärrettävä ja käytettävä ominaisuus on ehkä mukana olevien olioiden luontijärjestyksen ja tämän aikana kutsuttavien virtuaalifunktioiden seuraaminen. Syy ei ole monimutkaisuudessa, vaan näkyvän koodin takana piilevässä toiminnallisuudessa. Hyvää tässä on, että sovellusrunko tekee paljon asioita puolestasi. Kuitenkin toiminnan ymmärtämiselle on eduksi, jos opit tuntemaan piilossa oleviakin toimintoja. Listauksessa 12.1 olevan CSingleDocTemplate-olion luomisen ja alustamisen jälkeen riveillä 6-12 käsitellään komentorivin parametrit ja sovellusikkuna näytetään. CCommandLineInfo-luokka (rivi 14) huolehtii sovellukselle komentorivillä syötetyistä argumenteista. Funktio CWinApp:: ParseCommandLine (rivillä 15) käyttää parametrinä viittausta CCommandLineInfo-olioon. Kullekin argumentille kutsutaan ParseParam-funktiota ja CCommandLineInfo-olio täytetään näin argumenttien arvoilla. Taulukossa 12.2 esitetään komentorivin oletusparametrit ja niiden merkitys. TAULUKKO 12.2 Komentorivin argumentit Argumentti Tarkoitus Ei argumentteja Luo uusi dokumentti/asiakirja. Tiedosto Avaa annettu tiedosto. /p tiedosto Tulosta annettu tiedosto. /pt tiedosto Tulosta annettu tiedosto määrätyllä tulostimella. tulostinportti /dde Käynnistä DDE-istunto. /automation Käynnistä sovellus OLE-palvelimena. /embedding Käynnistä sovellus toisessa sovelluksessa olevan OLE-objektin muokkaukseen. Kuten taulukosta 12.2 huomaat, ilman argumentteja luodaan sovelluksen käynnistyessä uusi dokumentti. Tämä on luonnollisesti oletustoiminto. Dokumentin ohella luodaan myös kehysikkuna sekä näkymä. Tämä kaikki tapahtuu CWinApp::ProcessShellCommands-
13 funktiossa rivillä 21. Listauksessa 12.2 on esitelty mukana olevat tapahtumat. Huomaa, että listauksen varsinainen koodiosa on ohitettu kolmella pisteellä ja siinä on keskitytty kuvaamaan ainoastaan luomistyötä. LISTAUS 12.2 LST12_2.CPP Dokumentin, näkymän ja kehyksen luomiskertomus OSA III LUKU BOOL CWinApp::ProcessShellCommands(CCommandLineInfo& rcmdinfo) 1 2 { 3 if(fcmdinfo.newfile) 4 { 5 OnFileNew(); 6 } 7 if(fcmdinfo.openfile) 8 { 9 OpenDocumentFile(rCmdInfo.strFileName); 10 } } 13 void CWinApp::OnFileNew() 14 { 15 m_pdocmanager->onfilenew(); 16 } 17 void CDocManager::OnFileNew() 18 { 19 ptemplate->opendocumentfile(null); 2 20 } 21 CSingleDocTemplate::OpenDocumentFile(LPCTSTR lpszpathname) 22 { 23 if(m_ponlydoc!= NULL) 24 pdocument->savemodified(); 3 25 else 26 { 27 pdocument = CreateNewDocument(); 28 pframe = CreateNewFrame(pDocument): 4 29 } pdocument->onnewdocument(); 5 32 InitialUpdateFrame(pFrame, pdocument); 6 1 Tätä kutsuu InitInstancefunktio. 2 ptemplate on osoitin jo rekisteröityyn CSingleDocTemplate-olioon. 3 Jos dokumentti on olemassa se alustetaan uudelleen. 4 Dokumentti ja kehys muodostetaan ajonaikaisten luokkatietojen perusteella dokumenttimallissa. 5 Tämä virtuaalifunktio korvataan omalla dokumentin alustamista varten. 6 Alustaa kehysikkunan kutsumalla LoadFrame-funktiota. Aktivoi näkymän ja lähettää WM_INITIALUPDATE-sanoman, joka aiheuttaa CView::OnInitialUpdatekäsittelijän kutsumisen. Riveillä 1-12 esitetty CWinApp::ProcessShellCommand-funktio käynnistää komentoriviparametrien perusteella tarvittavia funktioita. Rivin 13 funktiota CWinApp::OnFileNew kutsutaan, ellei komentorivillä ole annettu argumentteja. Tätä kutsutaan myös käyttäjän valitessa Tiedosto-valikosta Uusi (File/New), minkä AppWizard kytkeekin automaattisesti valikkoon.
14 262 Sovelluksen osat Listauksessa 12.2 esitetään uuden dokumentin luominen sovelluksen käynnistyessä, eikä ero tämän ja tiedoston avaamisen välillä ole kovin suuri. Ero tehdään alussa, jolloin CWinApp::ProcessShellCommandfunktio joko löytää annetun tiedoston tai kysyy sitä käyttäjältä valintaikkunassa. Tiedoston paikantamisen jälkeen sen hakemistopolku ja nimi syötetään rivin 21 samalla CSingleDocTemplate:: OpenDocumentFile-funktiolle. Ilman tiedostoa funktio saisi NULLarvon eli loisi uuden dokumentin. CWinApp::OnFileNew antaa välittömästi suoritusvastuun (rivillä 15) CDocManager::OnFileNew-funktiolle, joka hakee käyttöönsä osoittimen juuri luotuun CSingleDocTemplate-olioon. Osoittimen avulla kutsutaan OpenDocumentFile-funktiota NULL-parametrillä. Tämä funktio tekeekin sitten varsinaisen työn. OLE-dokumentit Jos määrität AppWizardissa sovelluksesi OLE-säilöksi tai OLE-palvelimeksi, dokumenttiluokkasi johdetaan jostain CDocumentin kolmesta aliluokasta: COleDocument, COleLinkingDoc tai COleServerDoc. Kukin näistä pohjaa toimintansa edellisen toiminnoille. Perusero tavallisiin dokumentteihin on kyky käsitellä dokumenttia OLEobjektiluettelona. CSingleDocTemplate::OpenDocumentFile SDI-sovelluksen dokumenttiolio luodaan vain kerran (kun OpenDocumentFile-funktiota kutsutaan ensimmäisen kerran). Uudet tämän funktion kutsut Tiedosto-valikon Uusi tai Avaa-komentojen (File/New, File/Open) seurauksena alustavat avoimen dokumentin uudelleenkäyttöä varten. Uudelleenalustaminen tehdään SaveModified-funktiossa, joka aluksi tarkistaa dokumentin muutetun tilan. Kaikkien dokumenttien kantaluokalla CDocument on BOOLtyylinen jäsenmuuttuja, jossa on tieto siitä, onko dokumenttia muutettu. Tämä jäsenmuuttuja voidaan asettaa SetModifiedFlag-funktiolla. Jos käsiteltävää dokumenttia muutetaan, käyttäjää pyydetään tallettamaan dokumentti ennen jatkamista. Sanomaruudussa käyttäjä voi jatkaa toimintaa tallettamalla dokumentin, tallettamatta dokumenttia tai perumalla koko OpenDocumentFile-funktion käytön. Dokumentti talletetaan niin haluttaessa OnSaveDocument-funktiolla ja se alustetaan DeleteContents-funktiolla; näitä molempia käsitellään hieman myöhemmin. Jos dokumentti joudutaan luomaan, se tehdään funktiolla CreateNewDocument (rivillä 27). Tämä luo sovelluskohtaisen dokumenttiolion dokumenttimallin ajonaikaisen luokan tietojen perusteella. Kyseinen funktio myös lisää uuden dokumentin nykyisten dokumenttien luetteloon. Kun dokumentti on luotu, luodaan myös kehys ja näkymä toisella dokumenttimallin funktiolla, CreateNewFrame. CreateNewFrame-funktio (rivillä 28) tekee kehysikkuna- ja näkymäoliot
15 myös dokumenttimallin ajonaikaisen luokan tietojen perusteella. Kehyksen luomisen jälkeen kutsutaan CFrameWnd::LoadFrame-funktiota, jolle välitetään parametreinä dokumenttimallin muodostimessa määritetty resurssitunnus. Kuten muistanet, tämä oli IDR_MAINFRAME. LoadFrame-funktio lataa eri resurssit (valikon, työkalurivin, kuvakkeen, pikavalintataulukon ja merkkijonot) ja liittää ne kehysikkunaan. Huomaa myös, että resurssien lataamisen epäonnistuminen aiheuttaa koko LoadFrame-funktion epäonnistumisen, jolloin annetaan debuggaussanoma Warning: CDocTemplate couldn t create a frame. Nyt kun kaikki oliot on muodostettu, dokumentti alustetaan OnNewDocument-funktiossa rivillä 31 (funktio selitetään tarkemmin myöhemmin). Luomistoiminnon lopuksi kutsutaan dokumenttimallin funktiota InitialUpdateFrame (rivi 32). Tämä asettaa vasta luodun näkymän aktiiviseksi ja lähettää sitten WM_INITIALUPDATE-sanoman kehysikkunan lapsille, myös näkymäikkunalle. Tämän sanoman saamisesta seuraa CView::OnInitialUpdate-virtuaalifunktion kutsuminen. On hyvin tavallista, että tämä funktio korvataan omalla näkymän alustuksella. Muista myös, että yleensä on tarpeen kutsua lisäksi kantaluokan versiota kyseisestä funktiosta. OSA III LUKU CDocument::OnNewDocument Tätä funktiota kutsutaan uutta dokumenttioliota luotaessa. Tämä voi tapahtua jo sovelluksen käynnistymisvaiheessa tai käyttäjän valitessa Tiedosto-valikosta Uusi-komennon (File/New). Funktio kutsuu DeleteContents-funktiota dokumentin sisällön siistimiseksi ja tilatiedon asettamiseksi FALSE-arvoon (eli dokumenttia ei ole muutettu). Se myös tyhjentää merkkijonon, jossa dokumentin tiedostonimi oli. CDocument::OnOpenDocument Tätä funktiota kutsutaan avattaessa dokumenttia tiedostosta. Tämä voi tapahtua jo sovelluksen käynnistymisvaiheessa komontorivin parametrien perusteella tai käyttäjän valitessa Tiedosto-valikosta Avaa-komennon (File/Open). Funktio kutsuu DeleteContentsfunktiota dokumentin sisällön tyhjentämiseksi. Oletustoteutuksessa annettu tiedosto avataan ja Serialize-funktiota kutsutaan dokumentin tietojen lukemiseksi sovellukseen. Tietojen lataamisen jälkeen tiedosto suljetaan ja muuttamistieto nollatan FALSE-arvoon ( ei muutettu ).
16 264 Sovelluksen osat CDocument::OnSaveDocument Tätä funktiota kutsutaan tiedostoa talletettaessa. Tämä tapahtuu käyttäjän valitessa Tiedosto-valikosta Tallenna tai Tallenna nimellä -komennon (File/Save, File/Save As). Tätä kutsutaan myös käyttäjän sulkiessa dokumentin ja valitessa muuttuneen dokumentin tallennuksen siinä vaiheessa. Funktio saa yhden parametrin, osoittimen tiedostonimeen. Oletustoteutuksessa tiedosto avataan ja dokumentin tiedot talletetaan Serialize-funktiolla. Tietojen tallentamisen jälkeen tiedosto suljetaan ja dokumentin muuttamistilaksi asetetaan FALSE ( ei muutettu ). CDocument::DeleteContents Tätä funktiota kutsuvat OnNewDocument, OnOpenDocument ja OnCloseDocument. Funktio huolehtii nykyisen dokumentin sisällön tuhoamisesta. Oletustoteutusta ei ole, koska dokumentin tiedot ovat aina sovelluskohtaisia. Joudut siis korvaamaan tämän funktion omallasi, jonka pitäisi vapauttaa dokumenttisi varaamat jäsenmuuttujat sekä alustaa muuttujat uudelleen. CDocument::OnCloseDocument Tätä funktiota kutsutaan dokumenttia suljettaessa. SDI-sovelluksessa tämä tapahtuu käyttäjän avatessa uuden tiedoston tai luodessa uuden dokumentin sekä sovelluksen sulkeutuessa. Aluksi funktio sulkee kaikki dokumenttiin liitetyt näkymät ja kutsuu sitten DeleteContents-funktiota ennen dokumenttiolion tuhoamista. KATSO MYÖS Lisätietoja OLE-automaatiosta luvusta 25. Tietoja tiedostonkäsittelystä ja serialisoinnista luvun 23 alusta. Dokumenttien ja näkymien yhteiskäyttö Dokumentti/näkymä-arkkitehtuuri on hyvä pohja toiminnallisesti eri kokoisille sovelluksille. Tiedonkäsittelykoodin erottaminen käyttöliittymästä luo helpommin hallittavan ja ylläpidettävän, modulaarisen sovelluksen. Esimerkiksi dokumentin tietojen esittäminen jollain uudella tavalla onnistuu yksinkertaisesti luomalla uusi näkymäluokka, joka
17 hakee tarvitsemansa tiedot nykyisen dokumentin rajapinnan kautta. Yhteistoiminnan suunnittelu dokumentti- ja näkymäluokkien välille on erityisen tärkeä toimi. Yleensä kokeneidenkin ohjelmoijien on vaikea päättää, mitkä tiedot kuuluvat dokumenttiin, mitkä näkymään. Tähän ei ole olemassa selkeitä sääntöjä ja päätös riippuu myös sovelluksesta. Ihanteellisessa tapauksessa näkymässä ei tarvittaisi olenkaan omia tietoja, vaan se saisi kaikki tarvitsemansa dokumentista. Näin muutokset tehtäisiin vain yhteen paikkaan, josta dokumenttiin liitetyille näkymille tiedotettaisiin tiedon muuttumisesta. Tämä lähtökohta ei kuitenkaan ole aina selkein ja tehokkain. Esimerkiksi tekstinkäsittelysovellukset pitävät usein kopiota osasta tiedoista itsellään, jotta dokumenttiin ei tarvitsisi koskea aivan jokaisen näppäimenpainalluksen jälkeen (vaikuttaa sovelluksen nopeuteen). On useita tilanteita, jolloin dokumentin tietojen välivarastointi on suotavaa. Tämän tekemiseen ei ole mitään estettä, voithan koodata sovelluksesi niin kuin haluat. Tarpeeton tiedon kaksinkertainen tallettaminen kuitenkin hankaloittaa ohjelmointityötä, joten sitä kannattaa välttää. OSA III LUKU Dokumentin tietojen alustaminen CDocument on abstrakti luokka, joten joudut periyttämän siitä oman dokumenttiluokkasi. Sovelluksesi tiedot pidetään tuon dokumenttiluokan jäsenmuuttujissa. Aivan yksinkertaisimpia sovelluksia lukuun ottamatta dokumenteissa tarvitaan useita jäsenmuuttujia, usein taulukoina tai linkitettyinä listoina. Muista, että SDI-sovelluksissa dokumenttiolio muodostetaan vain kerran ja sitä käytetään uudelleen seuraavien dokumenttien sitä vaatiessa. Tästä syystä dokumentin tietojen alustamista ei kannata sijoittaa dokumenttiolion muodostimeen, eihän sitä enää kutsuta seuraavien dokumenttien kohdalla. Aiemmin dokumentti/näkymä-arkkitehtuurin funktioista puhuttaessa huomasit, että dokumentin virtuaalifunktiota DeleteContentskutsutaan automaattisesti funktioista OnNewDocument, OnOpenDocument ja OnCloseDocument. Näissä tilanteissa dokumentin sisältö vaihtuu. DeleteContents vastaa dokumentin tyhjentämisestä, joten sen jälkeen on hyvin sopiva hetki alustaa dokumentin jäsenmuuttujat uudelleen. MFC-kokoelmaluokat MFC-kirjastossa on useita apuluokkia mutkikkaiden tietorakenteiden suunnitteluun. Näitä kokoelmia (collection) ovat muun muassa CArray ja CObList. Käytä näitä valmiita toimintoja aina, kun se on mahdollista.
18 266 Dokumentin muuttujien suojaaminen Dokumenttiluokassasi tulee olla protected-tyyppisiä jäsenmuuttujia, joita käsitellään julkisten public-tyyppisten saantifunktioiden kautta. Sovelluksen osat Jäsenmuuttujien lisääminen dokumenttiin Dokumenttiluokka on samanlainen kuin projektin muutkin luokat, joten myös siihen voidaan lisätä jäsenmuuttujia ClassView-sivun Add Member Variable pikavalikosta. Jos lisäät useita muuttujia, saattaa olla helpompaa lisätä ne suoraan ohjelmakoodiin. Saat avattua dokumenttiluokan otsikkotiedoston (.h) kaksoisnapauttamalla dokumenttiluokan nimeä ClassView-sivulla. Jotta tieto pysyisi ehyenä, tulee dokumentin jäsenmuuttujat määritellä suojatuiksi (protected). Suojattua muuttujaa voi muuttaa ainoastaan oman luokan tai luokasta perityn luokan jäsenfunktio. Kun muut luokat eivät pääse muuttamaan muuttujia, käyttöön jää vain yksi paikka, josta muutoksia voidaan tehdä ja näkymän liittäminen dokumenttiin tulee helpommaksi. Jotta näkymät voisivat käsitellä dokumentin tietoja, tulee dokumenttiluokassa olla tietojen käsittelyfunktiot, jotka palauttavat viittaukset dokumentin jäsenmuuttujiin. Kun nyt tunnet dokumentti/näkymä-arkkitehtuuria, on aika kehittää aloittaa SDICoin-esimerkin työstäminen. Tässä kappaleessa käsittelet dokumenttiluokkaa CSDICoinDoc. Dokumenttiluokan tarvitsema data koostuu pelkästään kolikoiden nykyisestä lukumäärästä, mikä mahtuu yhteen jäsenmuuttujaan. Kun näkymä joutuu piirtämään kolikkokasan, sen tulee tietää tämä kolikoiden määrä. Yksinkertaisin tapa saada tämä tieto käyttöön olisi määritellä dokumenttiluokkaan globaali muuttuja, jota näkymäluokka voisi suoraan käsitellä. Haittana olisi kuitenkin näkymäluokan koodin saama mahdollisuus muuttaa kolikoiden määrästä kertovaa muuttujaa, esimerkiksi vahingossa. Parempi tapa toimia onkin asettaa lukumääräjäsenmuuttuja suojatuksi ja varustaa dokumenttiluokka muuttujan käsittelyfunktioilla. Lisää siis tähän tarvittava koodi seuraavasti. Dokumentin tiedon tallennuksen sekä saantimetodien toteutus 1. Valitse ClassView-sivulla CSDICoinDoc-luokka ja se pikavalikosta Add Member Variable. Saat esiin vastaavan ikkunan. 2. Syötä muuttujan tyypiksi Variable Type ruutuun int. Anna muuttujan nimeksi Variable Name ruutuun m_ncoins ja valitse Protected Access valintapainike. Napauta OK.
19 3. Valitse CSDICoinDoc-luokan pikavalikosta Add Member Function. 4. Syötä funktion tyypiksi int ja Function Declaration ruutuun GetCoinCount. Valitse myös Public Access valintapainike. 5. Syötä GetCoinCount-funktion sisällöksi seuraava koodirivi: return m_ncoins; 6. Käynnistä ClassWizard näppäilemällä Ctrl+W tai valitsemalla View-valikosta ClassWizard. 7. Valitse Message Maps-välilehti. 8. Valitse Class Name yhdistelmäruudusta CSDICoinDoc. 9. Valitse Object IDs luetteloruudusta CSDICoinDoc. 10. Valitse Messages-luetteloruudusta DeleteContents ja napauta Add Function painiketta. 11. Sulje ClassWizard napauttamalla OK. 12. Syötä seuraava koodirivi DeleteContents-funktioon TODOkommenttien jälkeen: m_ncoins = 1; CSDICoinDoc-luokassa on nyt suojattu jäsenmuuttuja m_ncoins, joka alustetaan korvaamassasi DeleteContents-funktiossa. Olet myös lisännyt saantifunktion GetCoinCount, jolla näkymä saa m_ncoinsmuuttujan arvon. OSA III LUKU Dokumentin tietojen hakeminen näkymästä Jotta näkymä saisi käsittelyyn dokumentin tietoja, sen tulee ensin päästä käsiksi itse dokumenttiolioon. Tämä käy automaattisesti MFCsovellusrungon avulla lisäämällä sovelluskohtaiseen näkymäluokkaan GetDocument-funktiokutsun. Tämä funktio palauttaa osoittimen dokumenttimallissa näkymään liitettyyn dokumenttiin. Oikeastaan sovellusrunko tarjoaa kaksikin GetDocument-funktiota. Tässä esimerkissä huomaat, että CSDICoinView-luokalla on GetDocument-toteutus SDICoinView.cpp-tiedostossa sekä SDICoinView.h-tiedostossa, kuten seuraavassa esitetään. Nämä kaksi funktiota toimivat täsmälleen samoin, ainoa ero on, että ensimmäistä käytetään projektin kehitysaikaisessa (debug)-versiossa ja toista varsinaisessa julkaisuversiossa (release). Syy tähän on, että koodin sekaan kirjoitetut inline-funktiot toimivat tehokkaammin, ja tätä funktiota tullaan todennäköisesti kutsumaan useasti suorituksen aikana. Inline-funktioiden käyttö saattaa nopeuttaa ohjelmaa inline-avainsanalla kääntäjä korvaa funktiokutsun funktion koodilla. Ohjelma nopeutuu, koska funktion kutsumista ei tarvita. Huomaa, että inlinefunktioita ei voi debuggerissa käydä läpi rivi riviltä.
20 268 Sovelluksen osat SDICoinView.cpp #ifdef _DEBUG CSDICoinDoc* CSDICoinView::GetDocument() { ASSERT(m_pDocument->IsKindOf( RUNTIME_CLASS(CSDICoinDoc))); return (CSDICoinDoc*) m_pdocument; } #endif // _DEBUG SDICoinView.h #ifndef _DEBUG // _DEBUG-versio oli SDICoinView.cpp:ssä inline CSDICoinDoc* CSDICoinView::GetDocument() { return (CSDICoinDoc*) m_pdocument; } #endif CSDICoinView-luokka vastaa kolikkopinon näyttämisestä. Itse kolikon kuvan piirtävä koodi on varsin yksinkertainen ja se sijaitsee CSDICoinView::OnDraw-funktiossa. AppWizard on jo luonut tuon funktion rungon valmiiksi. MFC-sovellusrunko kutsuu OnDrawfunktiota aina, kun näkymä pitää piirtää näytölle esimerkiksi kehysikkunan kokoa muutettaessa. OnDraw-funktiota kutsutaan myös tulostettaessa sekä tulostuksen esikatselutoiminnassa. Erona näytölle ja tulostimelle piirtämisessä on piirtofunktiolle välitettävä eri piirtopinta (device context). Muokkaa nyt CSDICoinView::OnDraw-funktio listauksen 12.3 mukaiseksi. LISTAUS 12.3 LST12_3.CPP Dokumentin datan lukeminen näkymän piirtämiseksi 1 Hae osoitin dokumenttiluokkaan kutsumalla näkymäluokan GetDocument()-funktiota. 2 Hae osoitin pdcpiirtopinnalla valittuna olevaan siveltimeen. 3 Luo keltainen sivellin. 4 Valitse uusi sivellin piirtopinnalle. 1 void CSDICoinView::OnDraw(CDC* pdc) 2 { 3 // ** Retrieve a pointer to the document 4 CSDICoinDoc* pdoc = GetDocument(); 1 5 ASSERT_VALID(pDoc); 6 7 // TODO: add draw code for native data here 8 // ** Save the current brush 9 CBrush* poldbrush = pdc->getcurrentbrush(); // ** Create a solid yellow brush 12 CBrush br; 13 br.createsolidbrush(rgb(255,255,0)); // ** Select the yellow brush in to the device context 16 pdc->selectobject(&br); 4 17
21 OSA III LUKU // ** Retrieve the number of coins from the document 19 // ** and draw two ellipses to represent each coin 20 for(int ncount = 0; ncount < pdoc->getcoincount(); ncount++) 5 21 { 22 int y = * ncount; 23 pdc->ellipse(40, y, 100, y-30); 6 24 pdc->ellipse(40, y-10, 100, y-35); 25 } // ** Restore the current brush 28 pdc->selectobject(poldbrush); 7 29 } 5 Käy läpi kaikki piirrettävät kolikot. Kolikoiden lukumäärä saadaan saantifunktiolla GetCoinCount(). 6 Piirrä kaksi ellipsiä. Ellipsien y-suuntainen paikka määräytyy kolikon numeron mukaan. 7 Valitse alkuperäinen piirtopinnan sivellin takaisin käyttöön. AppWizard tekee automaattisesti funktion kaksi ensimmäistä riviä (4 ja 5). GetDocument palauttaa osoittimen dokumenttiolioon ja tämä talletetaan muuttujaan pdoc. Osoitinta käytetään rivin 20 forsilmukassa hakemaan kolikoiden sen hetkinen lukumäärä saantifunktion GetCoinCount avulla. Rivillä 9 talletetaan osoitin piirtopinnalla valittuna olevaan siveltimeen (brush) muuttujaan poldbrush, joka palautetaan ennalleen funktion lopussa rivillä 28. Riveillä 12, 13 ja 16 luodaan keltainen sivellin paikalliseen muuttujaan br ja se valitaan piirtopinnan siveltimeksi, valmiiksi piirtämään kolikoita. Kukin kolikko piirretään kahdella ellipsillä, toinen toisensa päälle, jolloin saadaan kolmiulotteinen vaikutelma kolikosta. Tämä tehdään käytännössä CDC::Ellipse-funktiota käyttäen, riveillä 23 ja 24. KATSO MYÖS Lisätietoja piirtopinnasta luvusta 15. Lisätietoja grafiikan piirtämisestä luvusta 16. Vakiomallin resurssien käyttö Kuten jo aiemmin mainittiin, projektiin on lisätty automaattisesti useita resursseja SDI-sovelluksen näkyviä osia varten. Näitä ovat valikko, työkalurivi, kuvake, näppäimistöpikavalinnat sekä merkkijonotaulukko. Kaikki nämä vakioresurssit ovat täysin toimivia. Esimerkiksi Filevalikon New-komento kutsuu CWinApp::OnFileNew-käsittelijää, joka luo uuden dokumentin, kuten tekee myös työkalurivin New-kuvake. Tämä ei tarkoitta, ettetkö voisi muuttaa näiden valintojen oletus-
22 270 Sovelluksen osat käyttäytymistä. Voit toki korvata haluamasi funktiot omillasi ja tehdä funktiossa mitä haluat. Saat jopa poistaa koko valikon ja työkalurivin, elleivät ne sovi sovellukseesi. On kuitenkin tavallisempaa jättää vakiotoiminnot ennalleen ja ainoastaan lisätä omat sovelluskohtaiset valinnat. Tämä käy helposti, koska kaikkia resursseja voidaan muokata resurssieditorissa ja ne voidaan liittää komentoja käsitteleviin funktioihin ClassWizardilla. Pikavalintojen lisääminen valikon komentoihin Kun muokkaat valikkoa resurssieditorissa, voit määrittää valikon komennolle näppäinyhdistelmän valikkotekstin perään. Jos esimerkiksi valikon komennon teksti määritellään &Toolbar\tCtrl+T, saadaan työkalurivi (toolbar) näkyviin Ctrl+T-näppäilyllä. joudut myös lisäämään pikavalintataulukkoon (accelerator table) ID_VIEW_TOOLBAR-tunnuksen ja määrittämään sille näppäinyhdistelmän Ctrl ja T. Joudut lisäämään kaksi valikon komentoa SDICoin-esimerkkiin, toisen kolikon lisäämistä, toisen poistamista varten. Kun valitset toisen komennoista, se kutsuu dokumenttiluokan funktiota, joka joko kasvattaa tai vähentää kolikoiden lukumäärää ja varmistaa, että näkymä päivitetään. Lisää komennot valikkoon seuraavasti. Valikon komentojen lisääminen 1. Avaa ResourceView-sivulla Menu-kansio ja kaksoisnapauta IDR_MAINFRAME-alkiota. Saat esiin valikkoresurssin resurssieditoriin. 2. Napauta Edit-alkiota resurssieditorissa ja saat esiin alasvetovalikon. 3. Kaksoisnapauta alasvetovalikon alinta tyhjää alkiota. Saat tällöin esiin Menu Item Properties valintaikkunan (kuva 12.7). 4. Syötä valikon komennon ID-tunnukseksi tässä esimerkissä ID_EDIT_ADD_COIN. 5. Anna valikkoteksti Caption-ruutuun, esimerkiksi Add a Coin. 6. Syötä komennon ohjetekstiksi Prompt-ruutuun Increase the number of coins. 7. Kaksoisnapauta uudestaan alasvetovalikon alinta tyhjää alkiota. 8. Syötä komennon ID-tunnukseksi ID_EDIT_REMOVE_COIN.
23 OSA III LUKU KUVA 12.7 Menu Item Properties valintaikkuna. 9. Anna valikkoteksti Caption-ruutuun, esimerkiksi Remove a Coin. 10. Syötä komennon ohjetekstiksi Prompt-ruutuun Decrease the number of coins. 11. Käynnistä ClassWizard näppäilemällä Ctrl+W tai valitsemalla View-valikosta ClassWizard. 12. Valitse Message Maps välilehti. 13. Valitse luokan nimeksi Class Name yhdistelmäruutuun CSDICoinDoc. 14. Valitse Object IDs luetteloruudussa ID_EDIT_ADD_COIN. 15. Valitse Messages-luetteloruudussa COMMAND ja napauta Add Function painiketta. Napauta OK Add Member Function valintaikkunassa. 16. Valitse Object IDs luetteloruudussa ID_REMOVE_ADD_COIN. 17. Valitse Messages-luetteloruudussa COMMAND ja napauta Add Function painiketta. Napauta OK Add Member Function valintaikkunassa. 18. Napauta Edit Code painiketta.
24 272 Sovelluksen osat Näkymän päivittäminen Miltei aina, kun dokumentin tietoja on muutettu, on tarpeen esittää tämä myös näkymässä. Toiminto saadaan aikaan kutsumalla funktiota, joka saa aikaan näkymän piirtämisen uudelleen. Edellisessä kappaleessa lisäsit kaksi komentoa valikkoon sekä käsittelijäfunktiot niille dokumenttiluokkaan. Muokkaa nyt käsittelijäfunktiot listauksen 12.4 mukaisiksi. LISTAUS 12.4 LST12_4.CPP - Näkymän päivittäminen dokumentista 1 Tätä valikon komennon käsittelijää kutsutaan valittaessa Add a Coin -komento. 2 Kasvattaa dokumentin jäsenmuuttujaa, jossa pidetään yllä kolikoiden lukumäärää. 3 Saa aikaan dokumenttiin liitettyjen näkymien OnUpdate()- funktion kutsumisen, jonka seurauksena näkymät piirretään uudelleen. 1 void CSDICoinDoc::OnEditAddCoin() 1 2 { 3 // TODO: Add your command handler code here 4 // ** Increment the number of coins 5 m_ncoins++; 2 6 // ** Update view to redraw coin stack 7 UpdateAllViews(NULL); 3 8 } 9 void CSDICoinDoc::OnEditRemoveCoin() 10 { 11 // TODO: Add your command handler code here 12 // ** Decrement the number of coins 13 if(m_ncoins > 0) 14 m_ncoins--; 15 // ** Update view to redraw coin stack 16 UpdateAllViews(NULL); 17 } Kuten huomaat, lisäämäsi käsittelijäfunktio joko kasvattaa tai vähentää m_ncoins-muuttujan arvoa, joka onkin dokumentin koko data. Tämän jälkeen kutsutaan UpdateAllViews-funktiota parametrillä NULL. NULL parametrin arvona tarkoittaa, että kaikki dokumenttiin liitetyt näkymät päivitetään, kutsumalla kunkin näkymän omaa OnUpdatefunktiota. Tämä asettaa näkymäikkunan työalueen (client area) sisällön vanhentuneeksi ja saa aikaan OnDraw-funktion kutsumisen. Käännä ja aja nyt SDICoin-projektisi. Kokeile valikon Add a Coin ja Remove a Coin komentojen käyttöä. Näkymän tulisi olla kuvan 12.8 näköinen.
25 OSA III LUKU KUVA 12.8 SDICoin-sovellus.
26 274 Sovelluksen osat
MDI-sovellusten kehittäminen
OSA V 491 LUKU 21 21 LUKU MDI-sovelluksen luominen Siirtyminen dokumentti, näkymä- ja kehysluokan välillä Sovelluksen kehittäminen MFC;n monidokumentti/näkymä-arkkitehtuurilla 492 Kehittyneet dokumentti/näkymä-tekniikat
LisätiedotUsean näkymän luominen
OSA V 471 LUKU 20 20 LUKU Dynaamisten ja staattisten jakajaikkunoiden käyttö Resurssienhallinnan kaltaisen käyttöliittymän tekeminen sovelluksiin ja hallinta ilman ikkunan jakamista 472 Kehittyneet dokumentti/näkymä
LisätiedotLuettelo-, puu-, parannetun tekstiruutu- sekä HTML-näkymän käyttö
Luettelo-, puu-, parannetun tekstiruutu- sekä HTML-näkymän käyttö OSA V 439 LUKU 19 19 LUKU Luettelo-, puu-, parannetun tekstiruutu- sekä HTML-näkymän käyttö Luettelon tietojen ylläpito List View näkymässä
LisätiedotHarjoitustyö: virtuaalikone
Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman
LisätiedotHiirisanomiin vastaaminen
OSA II LUKU 8 163 8 LUKU Reagointi käyttäjän painaessa tai vapauttaessa hiiren painikkeen Omien funktioiden käyttö, kun hiiri liikkuu Hiirikoordinaattien käsittely ja valitun alueen tutkiminen 164 Näppäinpainallusten
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman
LisätiedotJypelin käyttöohjeet» Ruutukentän luominen
Jypelin käyttöohjeet» Ruutukentän luominen Pelissä kentän (Level) voi luoda tekstitiedostoon "piirretyn" mallin mukaisesti. Tällöin puhutaan, että tehdään ns. ruutukenttä, sillä tekstitiedostossa jokainen
LisätiedotHELIA 1 (1) Outi Virkki Käyttöliittymät ja ohjelmiston suunnittelu :04
HELIA 1 (1) Luento 7 Graafisen käyttöliittymän peruselementit... 2 Ikkunat... 2 Sovellusikkunat (Application Windows)... 2 Asiakirjaikkunat (Document Windows)... 3 Toissijaiset sovellusikkunat (Secondary
LisätiedotTekstikontrollit LUKU. Tekstin ja sanomien esittäminen valintaikkunoissa. Tekstin muokkaaminen suorituksen aikana. Tiedon tarkistaminen syötön aikana
OSA II LUKU 5 85 5 LUKU Tekstin ja sanomien esittäminen valintaikkunoissa Tekstin muokkaaminen suorituksen aikana Tiedon tarkistaminen syötön aikana Kontrollien toiminnan laajentaminen aliluokkien avulla
LisätiedotKehitysympäristö LUKU. Developer Studio kehitysympäristön alkeet. Liikkuminen projektin työtilassa ja sen eri näkymissä
OSA I LUKU 2 23 2 LUKU Developer Studio kehitysympäristön alkeet Liikkuminen projektin työtilassa ja sen eri näkymissä Projektien hallinnan vaatimat asetukset 24 Developer Studio - ympäristön räätälöinti
LisätiedotEsimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit
Liite E - Esimerkkiprojekti E Esimerkkiprojekti Olet lukenut koko kirjan. Olet sulattanut kaiken tekstin, Nyt on aika soveltaa oppimiasi uusia asioita pienen, mutta täydellisesti muotoiltuun, projektiin.
LisätiedotVisual C++ -ohjelman tekeminen ja suunnittelu
Visual C++ -ohjelman tekeminen ja suunnittelu OSA I LUKU 1 5 1 LUKU Visual C++ -ohjelman tekeminen ja suunnittelu Windows sovellusten tekeminen AppWizardilla Sovelluksen muokkaaminen resurssieditorilla
LisätiedotWeb Services tietokantaohjelmoinnin perusteet
ASP.NET Web Services Web Services tietokantaohjelmoinnin 2 (22) Sisällys Harjoitus 1: Tietokannat ja Web Services... 3 Harjoitus 2: Windows Client... 10 Harjoitus 3: Datan päivitys TableAdapterin avulla...
LisätiedotOlion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();
Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio
LisätiedotActiveX-kontrollien käyttö
OSA II LUKU 9 181 9 LUKU Kehittyneiden ActiveX-kontrollien lisääminen projektiisi Kontrollin ominaisuuksien ja tyylien muokkaaminen Kontrollista saadun tiedon hyödyntäminen ohjelmassa 182 ActiveX-kontrollit
LisätiedotSovelluksen toimintojen toteuttaminen
161 L U K U 5 Sovelluksen toimintojen toteuttaminen Oppitunti 1: Dialogien käyttäminen 162 Oppitunti 2: Sovelluksen tietojen näyttäminen ja tulostaminen 183 Oppitunti 3: Useiden säikeiden käyttäminen 197
LisätiedotOliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä
Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Matti Luukkainen 10.12.2009 Tässä esitetty esimerkki on mukaelma ja lyhennelmä Robert Martinin kirjasta Agile and Iterative Development löytyvästä
LisätiedotOpera Hotel Edition. Arvonlisäverokantojen muutos Operaan 01.07.2010. Finland. Toukokuu 2010 MICROS-Fidelio Finland Oy, Hotel Systems HelpDesk
Opera Hotel Edition Arvonlisäverokantojen muutos Operaan 01.07.2010 Toukokuu 2010 MICROS-Fidelio Finland Oy, Hotel Systems HelpDesk Sivu / Page: 1 / 15 Document revision history Version Revision Author
LisätiedotOHJE EXCEL-MAKRON LUOMISEKSI JA MAKRON KÄYTÖSTÄ
OHJE EXCEL-MAKRON LUOMISEKSI JA MAKRON KÄYTÖSTÄ Tässä ohjeessa esitetään kuinka Excel-taulukkolaskentaan luodaan makro ja annetaan muutama vinkki makron käyttöön. Ohje koostuu seuraavasti: 1. Mikä makro
LisätiedotT740103 Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010
12. Periytyminen Johdantoa Käytännössä vähänkään laajemmissa ohjelmissa joudutaan laatimaan useita luokkia, joiden pitäisi pystyä välittämään tietoa toisilleen. Ohjelmien ylläpidon kannalta olisi lisäksi
LisätiedotSisältö. 2. Taulukot. Yleistä. Yleistä
Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä
Lisätiedot11. oppitunti III. Viittaukset. Osa. Mikä on viittaus?
Osa III 11. oppitunti Viittaukset Kahdessa viime luvussa opit käyttämään osoittimia kohteiden käsittelyyn vapaalla muistialueella sekä viittaamaan noihin kohteisiin epäsuorasti. Tässä luvussa käsiteltävät
Lisätiedot9. Periytyminen Javassa 9.1
9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Ilmentymämetodien korvaaminen. Luokkametodien peittäminen. Super-attribuutti. Override-annotaatio.
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen
LisätiedotOlio-ohjelmointi Javalla
1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi
LisätiedotASENNUS- JA KÄYTTÖOHJE
ASENNUS- JA KÄYTTÖOHJE YKSIKKÖHINTA SOPIMUKSEN TOTEUTUNEET MÄÄRÄT-SOVELLUS CMPRO5 VERSIO 2.8 PÄIVITETTY HEINÄKUU 2010 COPYRIGHT 2010 ARTEMIS FINLAND OY. ALL RIGHTS RESERVED. KÄYTTÖOHJE SIVU 2 (12) SISÄLLYSLUETTELO
LisätiedotKaakkois-Suomen Ammattikorkeakoulu Oy Mikkelin Ammattikorkeakoulu Oy Kymenlaakson Ammattikorkeakoulu Oy
Opiskelijoiden OneDriveohje Kaakkois-Suomen Ammattikorkeakoulu Oy Mikkelin Ammattikorkeakoulu Oy Kymenlaakson Ammattikorkeakoulu Oy Ohjeen nimi Opiskelijoiden OneDrive-ohje Vastuuhenkilö Mari Jokiniemi
Lisätiedot815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.
LisätiedotYleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.
2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä
LisätiedotPiirtopinnalle piirtäminen
OSA IV 333 LUKU 15 15 LUKU Erilaiset piirtopinnat ja niiden käyttö Piirtotilan ja piirtopinnan asetukset ja käyttö Koordinaatistojen kohdistustapojen käyttö piirrettäessä tuumina tai sentteinä 334 Piirtopintatietorakenteet
LisätiedotVirtuaalifunktiot ja polymorfismi
Virtuaalifunktiot ja polymorfismi 16 Virtuaalifunktiot ja polymorfismi Polymorfismi on niin tehokas olio-ohjelmoinnin ominaisuus, että tulet varmastikin käyttämään sitä lähes kaikissa C++-ohjelmissasi.
LisätiedotSisältö. 22. Taulukot. Yleistä. Yleistä
Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä
LisätiedotOperaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta
C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus
LisätiedotSovellusten ohjelmointi Microsoft Foundation Classes -luokkien avulla
73 L U K U 3 Sovellusten ohjelmointi Microsoft Foundation Classes -luokkien avulla Oppitunti 1: Yleiskatsaus MFC:hen 74 Oppitunti 2: Win32-sovellusarkkitehtuuri 84 Oppitunti 3: MFC-sovelluskehys 89 Oppitunti
LisätiedotTulostaminen ja esikatselu
OSA V 521 LUKU 22 22 LUKU Tulostamisen ja esikatselu toteuttaminen vakiosovellusrunkoa räätälöimällä Monisivuisten raporttien toteuttaminen Eri sivusuhteiden ja laitteiden mittojen käsitteleminen Tulostaminen
LisätiedotTaulukot. 2002 Päivi Vartiainen 1
Taulukot Taulukon lisääminen FrontPagessa tapahtuu samalla tavoin kuin Word tekstinkäsittelyohjelmassakin. Valitse vakiotyökaluriviltä Lisää taulukko painike. Kun olet napsauttanut painikkeen alas voit
LisätiedotOsa. Listaus 2.1. HELLO.CPP esittelee C++ -ohjelman osat. 14: #include <iostream.h> 15: 16: int main() 17: {
Osa I 2. oppitunti C++-ohjelman osat Ennen kuin menemme yksityiskohtaisemmin sisälle C++-luokkiin, -muuttujiin jne, katsokaamme ensin, millaisista osista C++-ohjelma koostuu. Tämän tunnin aikana opit seuraavat
LisätiedotHaaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:
Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Microsoft SQL käyttö Yleistä VisualStudiosta Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen: - sovellushallintaan -
Lisätiedot15. Ohjelmoinnin tekniikkaa 15.1
15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien
LisätiedotKäyttäjän käsikirja. LIB 500 ja LIB 510 v.4.0.2. 8.2. Releasettelutyökalu. 8.2.1. Yleistä. ,NNXQDMRNDLOPRLWWDDHWWlNRKGHRQSlLYLWHWWlYl
1MRS751368-RUM Käyttäjän käsikirja 8.1. Releyksikön valitseminen Releyksiköt esitetään asemakuvassa painikkeina. 8 $VHPDNXYDMRVVDQlN\\UHOH\NVLNN Jos kohteita tarvitsee päivittää, avataan ikkuna (Kuva 8.1.-2)
LisätiedotVäitöskirja -mallipohja
JYVÄSKYLÄN YLIOPISTO Väitöskirja -mallipohja Word 2007/2010 IT-palvelut hannele.rajaniemi@jyu.fi https://koppa.jyu.fi/avoimet/thk/vaitoskirja sovellustuki@jyu.fi Sisältö Miten toimii väitöskirja/asiakirjamallipohja?
LisätiedotVersio 1.1 P/N 137-40340-20. Copyright 2002, ATI Technologies Inc. Kaikki oikeudet pidätetään.
HydraVision Käyttöopas Versio 1.1 P/N 137-40340-20 Copyright 2002, ATI Technologies Inc. Kaikki oikeudet pidätetään. ATI, kaikki ATI-tuotteiden ja tuotteen ominaisuuksien nimet ovat Ati Technologies Inc:in
Lisätiedot812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton
2015 syksy 2. vsk IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton Sisältö 1. Johdanto luontimalleihin 2. Proxy 3. Factory Method 4. Prototype 5. Singleton Suunnittelumallit Proxy et.
LisätiedotGraafisen käyttöliittymän ohjelmointi
TIE-11300 Tietotekniikan vaihtuva-alainen kurssi Graafisen käyttöliittymän ohjelmointi Luento 4 Valikot ja dialogit Juha-Matti Vanhatupa Sisältö Pääikkuna Valikot Dialogit Pääikkuna (top-level window)
LisätiedotTietokantojen ja tietuenäkymien käyttö
Tietokantojen ja tietuenäkymien käyttö OSA VI 579 LUKU 24 24 LUKU Tietokantojen ja tietuenäkymien käyttö ODBC-tietolähteen määrittäminen Liittyminen tietokantoihin MFC-sovelluksista Tietuejoukkojen kyseleminen
LisätiedotTALLENNETAAN MUISTITIKULLE JA MUISTIKORTILLE
TALLENNETAAN MUISTITIKULLE JA MUISTIKORTILLE HERVANNAN KIRJASTON TIETOTORI Insinöörinkatu 38 33720 Tampere 040 800 7805 tietotori.hervanta@tampere.fi TALLENNETAAN MUISTIKULLE JA MUISTIKORTILLE 1 Muistitikun
LisätiedotKuva 1. Jokaisen tavallisen kuvan tasotyökalussa näkyy vain yksi taso, tässä nimellä tausta.
Gimp alkeet XII 9 luokan ATK-työt/HaJa Sivu 1 / 6 GIMP:in tasotyökalu Lue ensin nämä ohjeet! Harjoitus lopussa! GIMP:in tasotyökalu on nimensä mukaisesti työkalu, jolla hallitaan tasoja, niiden läpinäkyvyyttä,
LisätiedotZeon PDF Driver Trial
Matlab-harjoitus 2: Kuvaajien piirto, skriptit ja funktiot. Matlabohjelmoinnin perusteita Numeerinen integrointi trapezoidaalimenetelmällä voidaan tehdä komennolla trapz. Esimerkki: Vaimenevan eksponentiaalin
Lisätiedot1. HARJOITUS harjoitus3_korjaus.doc
Word - harjoitus 1 1. HARJOITUS harjoitus3_korjaus.doc Kopioi itsellesi harjoitus3_korjaus.doc niminen tiedosto Avaa näyttöön kopioimasi harjoitus. Harjoitus on kirjoitettu WordPerfet 5.1 (DOS) versiolla
LisätiedotFonttien käyttö LUKU. Tekstin esittäminen värein ja tyylein. Fonttien käyttö sovelluksen viimeistelyyn OSA IV LUKU 17.
OSA IV 389 LUKU 17 17 LUKU Tekstin esittäminen värein ja tyylein sovelluksen viimeistelyyn 390 Grafiikan piirtäminen William Caxtonin keksittyä painetun sanomalehden olemme olleet pääsemättömissä painotuotteista.
LisätiedotTiedostojen lataaminen netistä ja asentaminen
s. 1/5 Tiedostojen lataaminen netistä ja asentaminen Yleistä Internetissä on paljon hyödyllisiä ilmaisohjelmia, jotka voi ladata ja asentaa omalle koneelle. Osa ohjelmista löytyy suomenkielisiltä sivuilta,
LisätiedotVerkkosivut perinteisesti. Tanja Välisalo 11.2.2009
Verkkosivut perinteisesti Tanja Välisalo 11.2.2009 WWW-sivujen vieminen omaan kotisivutilaan yliopiston mikroverkossa https://salasana.jyu.fi Klikkaa painiketta Activate WWW Klikkaa painiketta Activate
LisätiedotOsoitin ja viittaus C++:ssa
Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja
LisätiedotPedacode Pikaopas. Java-kehitysympäristön pystyttäminen
Pedacode Pikaopas Java-kehitysympäristön pystyttäminen Pikaoppaan sisältö Pikaoppaassa kuvataan, miten Windowstyöasemalle asennetaan Java-ohjelmoinnissa tarvittavat työkalut, minkälaisia konfigurointeja
LisätiedotTIETOKONEEN ASETUKSILLA PARANNAT KÄYTETTÄVYYTTÄ
TIETOKONEEN ASETUKSILLA PARANNAT KÄYTETTÄVYYTTÄ Windows XP-käyttöjärjestelmän asetuksilla sekä Word-asetuksilla voit vaikuttaa tietokoneen näytön ulkoasuun, selkeyteen ja helppokäyttöisyyteen.. 1) ASETUKSET
LisätiedotUutiskirjesovelluksen käyttöohje
Uutiskirjesovelluksen käyttöohje Käyttäjätuki: Suomen Golfpiste Oy Esterinportti 1 00240 HELSINKI Puhelin: (09) 1566 8800 Fax: (09) 1566 8801 E-mail: gp@golfpiste.com 2 Sisällys Johdanto... 1 Päänavigointi...
LisätiedotHarjoitus 3: Flash-komponenttiarkkitehtuuri (18.3.2016)
Harjoitus 3: Flash-komponenttiarkkitehtuuri (18.3.2016) Tietokoneavusteinen opetus -kurssilla opetetaan Adobe Flash CS6:n käyttämistä neljänä kertana: 11.3.2016, 15.3.2016, 18.3.2016 ja 1.4.2016. Harjoituskerroilla
LisätiedotA274101 TIETORAKENTEET JA ALGORITMIT
A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen
LisätiedotSiirtyminen Outlook 2010 -versioon
Tämän oppaan sisältö Microsoft Microsoft Outlook 2010 näyttää hyvin erilaiselta kuin Outlook 2003. Tämän oppaan tarkoituksena on helpottaa uuden ohjelman opiskelua. Seuraavassa on tietoja uuden käyttöliittymän
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 16.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 16.2.2010 1 / 41 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti
LisätiedotDatan tallentaminen, lataaminen ja siirtäminen
Datan tallentaminen, lataaminen ja siirtäminen OSA VI 547 LUKU 23 23 LUKU Datan tallentaminen, lataaminen ja siirtäminen Dokumentin tietojen tallentaminen ja lataaminen Tiedostojen luominen, lukeminen
LisätiedotJAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?
JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,
LisätiedotTilastokeskuksen rajapintapalveluiden käyttöönotto QGISohjelmistossa
1(13) Tilastokeskuksen rajapintapalveluiden käyttöönotto QGISohjelmistossa (QuantumGIS) Ohjeita laatiessa on käytetty QuantumGIS:n versiota 2.0.1. Ruudunkaappauskuvat ovat englanninkielisestä versiosta,
LisätiedotHarjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:
Harjoitus 7 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: class Lintu //Kentät private int _siivenpituus; protected double _aivojenkoko; private bool _osaakolentaa; //Ominaisuudet public int
Lisätiedot4. Luokan testaus ja käyttö olion kautta 4.1
4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään
LisätiedotUpdateIT 2010: Editorin käyttöohje
UpdateIT 2010: Editorin käyttöohje Käyttäjätuki: Suomen Golfpiste Oy Esterinportti 1 00240 HELSINKI Puhelin: (09) 1566 8800 Fax: (09) 1566 8801 E-mail: gp@golfpiste.com Sisällys Editorin käyttöohje...
Lisätiedot15. Ohjelmoinnin tekniikkaa 15.1
15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Geneerinen ohjelmointi. Lueteltu tyyppi enum. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien silmukoimiseen:
Lisätiedot6 XML-työkalut 1. 6 XML-työkalut
6 XML-työkalut 1 6 XML-työkalut XML:n periaatteiden tutustumisen jälkeen on helpompi tutustua XML-dokumenttien käsittelyyn ja katseluun suunniteltuja työkaiuja. XML:n yleistymisen pahin pullonkaula on
LisätiedotArkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14
Arkkitehtuurikuvaus Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy Ryhmä 14 Muutoshistoria Versio Pvm Päivittäjä Muutos 0.4 1.11.2007 Matti Eerola 0.3 18.10.2007 Matti Eerola 0.2
LisätiedotTYYLIT. Word Tyylit
Word 2013 Tyylit TYYLIT TYYLIT... 1 Pikatyylien käyttäminen... 1 Tyylimuotoilun poistaminen... 2 Tyylin muokkaaminen... 2 Uuden tyylin luominen muotoillusta tekstistä... 2 Uuden tyylin luominen valintataulussa...
LisätiedotIDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit
IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,
LisätiedotOhjelmointikielet ja -paradigmat 5op. Markus Norrena
Ohjelmointikielet ja -paradigmat 5op Markus Norrena Ko#tehtävä 4 Viimeistele "alkeellinen kuvagalleria". Käytännössä kaksi sivua Yksi jolla voi ladata kuvia palvelimelle (file upload) Toinen jolla ladattuja
LisätiedotValitse ruudun yläosassa oleva painike Download Scilab.
Luku 1 Ohjeita ohjelmiston Scilab käyttöön 1.1 Ohjelmiston lataaminen Ohjeet ohjelmiston lataamiseen Windows-koneelle. Mene verkko-osoitteeseen www.scilab.org. Valitse ruudun yläosassa oleva painike Download
LisätiedotOmapalvelu. Omapalvelussa voit
Omapalvelussa voit Omapalvelu tehdä vammaispalveluhakemuksen vammaispalvelulain mukaisista palveluista ja taloudellisesta tuesta sekä vaikeavammaisten kuljetuspalveluhakemuksen samoilla lomakkeilla voit
LisätiedotATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014
18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,
LisätiedotPlanssit (layouts) ja printtaus
1 / 21 Digitaalisen arkkitehtuurin yksikkö Aalto-yliopisto 17.11.2015 Planssit (layouts) ja printtaus Yksittäisen kuvan printtaus 2 / 21 Ennen printtausta valitse näkymä, jonka haluat printata, klikkaamalla
LisätiedotOpintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Taulukot: Array Taulukko Javassa pitää aina perustaa (new) Yksinkertaisessa tilanteessa taulukon koko tiedetään etukäteen ja
LisätiedotNäin asennat MS-DOS käyttöjärjestelmän virtuaalikoneeseen
Näissä ohjeissa käydään läpi Microsoftin MS-DOS 6.22 -käyttöjärjestelmän asennus Microsoftin Virtual PC 2007 -virtuaalikoneeseen. Asennusta varten sinulla on oltava Virtual PC 2007 asennettuna tietokoneellasi
LisätiedotUML ja luokkien väliset suhteet
UML ja luokkien väliset suhteet -Luokan kuvaaminen UML-tekniikalla -Yhteyssuhde ja koostumussuhde 1 Luokan kuvaaminen UML-tekniikalla : Luokka - attribuutti1 : tietotyyppi # attribuutti2 : tietotyyppi
Lisätiedot7. Oliot ja viitteet 7.1
7. Oliot ja viitteet 7.1 Sisällys Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden sijoitus. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona. Viite metodin
LisätiedotKäyttöliittymän luominen
119 L U K U 4 Käyttöliittymän luominen Oppitunti 1: Windows-sovelluksen käyttöliittymät 120 Oppitunti 2: Dialogien luominen 139 Laboratorio 4: STUploadin käyttöliittymän luominen 150 Kertaus 159 Tässä
LisätiedotTeknillinen korkeakoulu T-76.115 Tietojenkäsittelyopin ohjelmatyö. Testitapaukset - Koordinaattieditori
Testitapaukset - Koordinaattieditori Sisällysluettelo 1. Johdanto...3 2. Testattava järjestelmä...4 3. Toiminnallisuuden testitapaukset...5 3.1 Uuden projektin avaaminen...5 3.2 vaa olemassaoleva projekti...6
LisätiedotSisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä
Sisälls 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen.. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona.. Muuttumattomat ja muuttuvat merkkijonot.
Lisätiedot2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)
2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi
Lisätiedot,QWHUQHWVHODLPHQNl\WWlPLQHQ±,QWHUQHW([SORUHU
,QWHUQHWVHODLPHQNl\WWlPLQHQ±,QWHUQHW([SORUHU Tässä pääsette tutustumaan Internet Explorerin (IE) käyttöön. Muitakin selainversioita löytyy, kuten esimerkiksi Netscape, Opera ja Mozilla. Näiden muiden selainten
LisätiedotGPRS-lisäpalvelu INTERNET-ASETUKSET
GPRS-lisäpalvelu INTERNET-ASETUKSET GPRS-lisäpalvelu Internet-asetukset 2(22) Sisällysluettelo 1 INTERNET-ASETUKSET MICROSOFT WINDOWS 95/98... 3 1.1 MODEEMIN ASENNUS... 3 1.2 APN:N ASETTAMINEN... 3 1.3
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print
LisätiedotTulostinajurin ja paperikoon konfigurointiohjeet AutoCad 2006-2007 ohjelmille
Tulostinajurin ja paperikoon konfigurointiohjeet AutoCad 2006-2007 ohjelmille Erilaisista tulostusjärjestelmistä johtuen kopiolaitokset suosittelevat eri tulostinajureita tulostustiedostojen tekemiseen.
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Merkintöjen tulkintoja *++Pstack->top = item *Pstack->top++ = item (*Pstack->top)++ *(Pstack++)->top = item *(++Pstack)->top = item Lisää pinon toteutuksia Dynaaminen taulukko
LisätiedotKEMI-TORNIONLAAKSON KOULUTUSKUNTAYHTYMÄ LAPPIA LANGATON VIERAILIJAVERKKO 2(7) VERKKOYHTEYDEN MÄÄRITTELY WINDOWS XP:LLE (WINDOWS XP SP3)
LANGATON VIERAILIJAVERKKO 1(7) LANGATTOMAN VIERAILIJAVERKON KÄYTTÖ Kemi-Tornionlaakson koulutuskuntayhtymä Lappia tarjoaa vierailijoiden, opiskelijoiden ja henkilökunnan käyttöön suojatun langattoman verkon
LisätiedotGoogle-dokumentit. Opetusteknologiakeskus Mediamylly
Google-dokumentit 1 2 3 Yleistä 1.1 Tilin luominen 4 1.2 Docs-päävalikkoon siirtyminen 7 Dokumentit-päävalikko 2.1 Kirjaudu Dokumentteihin 9 2.2 Lähetä tiedosto Google-dokumentteihin 11 2.3 Uuden asiakirjan
LisätiedotXNA grafiikka laajennus opas. Paavo Räisänen. www.ohjelmoimaan.net. Tämän oppaan lähdekoodit ovat ladattavissa näiden sivujen Ladattavat osiossa.
XNA grafiikka laajennus opas Paavo Räisänen www.ohjelmoimaan.net Tämän oppaan lähdekoodit ovat ladattavissa näiden sivujen Ladattavat osiossa. Tätä opasta saa vapaasti kopioida, tulostaa ja levittää ei
LisätiedotKÄYTTÖOHJE. Servia. S solutions
KÄYTTÖOHJE Servia S solutions Versio 1.0 Servia S solutions Servia Finland Oy PL 1188 (Microkatu 1) 70211 KUOPIO puh. (017) 441 2780 info@servia.fi www.servia.fi 2001 2004 Servia Finland Oy. Kaikki oikeudet
LisätiedotCondes. Quick Start opas. Suunnistuksen ratamestariohjelmisto. Versio 8. Quick Start - opas Condes 8. olfellows www.olfellows.fi 1.
Condes Suunnistuksen ratamestariohjelmisto Versio 8 Quick Start opas Yhteystiedot: olfellows Jouni Laaksonen Poijukuja 4 21120 RAISIO Sähköposti: jouni.laaksonen@olfellows.fi www.olfellows.fi olfellows
LisätiedotEASY Tiedostopalvelin - mobiilin käyttöopas
EASY Tiedostopalvelin - mobiilin käyttöopas ios www.storageit.fi - Äyritie 8 D, 01510 VANTAA Salorantie 1, 98310 KEMIJÄRVI Sisältö 1. Lataaminen ja asennus 2. Kansiot ja tiedostot Uusien tiedostojen luonti
LisätiedotSisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä
Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat
LisätiedotMuita kuvankäsittelyohjelmia on mm. Paint Shop Pro, Photoshop Elements, Microsoft Office Picture Manager
Missio: 1. Asentaminen 2. Valokuvien tarkastelu, tallennus/formaatit, koko, tarkkuus, korjaukset/suotimet, rajaus 3. Kuvan luonti/työkalut (grafiikka kuvat) 4. Tekstin/grafiikan lisääminen kuviin, kuvien/grafiikan
LisätiedotNettiposti. Nettiposti käyttöohje
YKSIKÄÄN ASIAKAS EI OLE MEILLE LIIAN PIENI TAI MIKÄÄN HAASTE LIIAN SUURI. Nettiposti Nettiposti käyttöohje Tässä käyttöohjeessa kuvataan selainkäyttöisen Nettiposti sähköpostiohjelman toiminnot. Käyttöohje
LisätiedotSisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2
4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä
LisätiedotAsko Ikävalko, k0201291 22.2.2004 TP02S-D. Ohjelmointi (C-kieli) Projektityö. Työn valvoja: Olli Hämäläinen
Asko Ikävalko, k0201291 22.2.2004 TP02S-D Ohjelmointi (C-kieli) Projektityö Työn valvoja: Olli Hämäläinen Asko Ikävalko LOPPURAPORTTI 1(11) Ratkaisun kuvaus Käytetyt tiedostot Tietuerakenteet Onnistuin
Lisätiedot