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 Koodin lisääminen sovelluksen toiminnan muokkaamiseksi
6 Visual C++ -sovellusten luominen Visual C++ -ohjelman tekeminen ja suunnittelu Ne, jotka eivät ole koskaan tehneet Windows-ohjelmia, pitävät Windowsohjelmointia helposti miltei mahdottomana tehtävänä. Oikea työkalu tekee kuitenkin työn kuin työn helpommaksi ja käyttöliittymäohjelmointiin tuskin löydät parempaa työkalua kuin Visual C++ 6. Itse asiassa Visual C++ 6:lla voit tehdä Windows-sovelluksen alle minuutissa, mutta näin aluksi etenemme hieman hitaammin. Visual Studion toiset nimet Visual Studio oli aiemmalta nimeltään Developer Studio. Joskus tähän työkaluun viitataan myös nimellä IDE /Integrated Development environment, integroitu kehitysympäristö). Visual C++:n käynnistäminen Käynnistät Visual C++ valitsemalla tehtäväpalkin Käynnistä-valikosta (Start) Microsoft Visual C++ 6.0. Ohjelman käynnistyttyä näet Microsoft Developer Studio ikkunan. Developer Studio ikkuna tulee esiin käynnistäessäsi Visual C++:n. Tämä on nimi Visual C++:n käyttöliittymälle, joka näkyy kuvassa 1.1. Developer Studio on nyt työtilasi. Älä huolestu, ellei omasi näytä aivan samalta kuin kirjan kuvassa, opit kyllä tämän kirjan kuluessa löytämään tarvitsemasi valinnat. KUVA 1.1 Developer Studio ikkuna
Visual C++ -ohjelman tekeminen ja suunnittelu Uuden projektin luominen Aloittaessasi uuden sovelluksen tekemisen tarvitset sille projektin. Projektia käytetään paketoimaan kaikki Visual C++ -ohjelman osat ja tuottamaan Windows-sovellus. Valitse siis File-valikosta New tehdäksesi uuden projektin. New-valintaikkuna näkyy kuvan 1.2 mukaisena. OSA I LUKU 1 7 KUVA 1.2 New-valintaikkuna. Projektin tyypin valitseminen Joudut aluksi määrittämään, millaisen projektin aiot luoda. Napauta siis New-ikkunan Projects-välilehteä, ellei se ole jo valittu. Saat esiin kaikki tehtävissä olevat projektityypit. Valitse tätä esimerkkiä varten MFC AppWizard (exe) projektityyppien luettelosta. Tämä valinta tuottaa tavallisen Windows-sovellusohjelman. Projektien nimeäminen ja hakemiston valitseminen Jokaisella projektilla tulee olla nimi. Tämän voit antaa New-ikkunan Project Name ruudussa. Tässä esimerkissä kirjoita Project Name ruutuun nimeksi Minute. Mitä MFC tarkoittaa? Visual C++:n mukana toimitetaan Microsoft Foundation Class -kirjasto, joka on joukko valmiiksi määriteltyjä C++-luokkia. AppWizard tuottaa MFC-kirjaston luokista johdetun valmiin ohjelmarungon. Tässä kirjassa käsitellään juuri noiden MFCluokkien käyttöä.
8 Projektiesi nimeäminen Voit vapaasti nimetä projektisi eri nimellä kuin kirjan esimerkeissä suositellaan. Sekaannuksien välttämiseksi esimerkkiprojektien nimiä kannattaa kuitenkin käyttää. Omissa sovelluksissasi projektin nimi kertoo ohjelman toiminnasta. Ensimmäisen sovelluksen nimi, Minute, on valittu, koska tuo sovellus saadaan tehtyä valmiiksi alle minuutissa. Visual C++ -sovellusten luominen Visual C++ -ohjelman tekeminen ja suunnittelu Location-ruudussa määrität hakemiston, johon projektisi tiedostot talletetaan. Tässä esimerkissä sinun ei tarvitse muuttaa tätä hakemistoa toiseksi. Location-ruudussa näkyvä oletushakemisto riippuu Visual C++ :n asennuksessa tehdyistä valinnoista. Voit muuttaa tätä hakemistopolkua muokkaamalla sitä suoraan ruudussa tai painamalla ruudun oikealla puolen olevaa nappia ja hakemalla uuden hakemiston. Oletushakemisto muodostetaan projektin nimen mukaan, esimerkiksi C:\Program Files\Microsoft Visual Studio\MyProjects\Minute. AppWizardin käyttäminen Tarkistettuasi New-valintaikkunan asetukset napauta OK ja käynnistä projektisi luominen. Tässä vaiheessa annat AppWizardin tehdä sovelluksen alustavan koodin puolestasi. AppWizardin tehtävä onkin projektin alussa luoda ohjelmarunko, jota voit sitten itse koodaamalla laajentaa. AppWizard antaa sinun määrittää, millaisen ohjelman haluat, ja sitten se tekee MFCkirjaston avulla sovelluksen tarvitsemat tiedostot. KATSO MYÖS Saat lisätietoja valintaikkunapohjaisten sovellusten luomisesta luvussa 3. AppWizardin perusvalinnat AppWizard-valintaikkunassa (kuva 1.3) voit valita yhden kolmesta käyttöliittymä-vaihtoehdosta. Minute-projektissa käytämme valintaikkunapohjaista käyttöliittymää. Valitse siis AppWizardin aloitusikkunassa Dialog based. Kielen valintaruudussa (Language) voit pitää oletusvalinnan. Nyt olemme valinneet kaiken tarpeellisen ja AppWizard on valmis luomaan projektin tiedostot. Napauta siis Finish-painiketta. Saat esiin New Project Information ikkunan, jossa on vielä yhteenveto luotavan projektin ominaisuuksista (kuva 1.4).
Visual C++ -ohjelman tekeminen ja suunnittelu OSA I LUKU 1 9 KUVA 1.3 MFC AppWizard Step 1 valintaikkunassa valitset projektin tyypin. KUVA 1.4 New Project Information -valintaikkuna. AppWizard näyttää tämän valintaikkunan, jotta voit vahvistaa luotavan projektin tiedot. Näet projektiin luotavien C++ -luokkien ja tiedostojen nimet. Features-luettelosta näet myös sovellukseen valmiiksi tulevat AppWizardin luomat ominaisuudet. Napauta tässä New Project Information ikkunassa OK. AppWizard on tehtävänsä tehnyt ja nyt sinulla on uunituore Minuteprojekti avoinna Developer Studio ikkunassa. Jo tässä vaiheessa, vaikket ole nähnyt vielä yhtään riviä C++ -lähdekoodia, sinulla on valmis ja täysin käyttökuntoinen Windows-sovellus.
10 Uudelleen aloittaminen AppWizardilla AppWizardia käytetään ainoastaan projektien luomiseen. Et voi käyttää AppWizardia jo valmiille projektille. Jos haluat muuttaa projektin asetuksia, joudut poistamaan edellisen projektin ja aloittamaan alusta. Projektin saat tuhottua poistamalla sen hakemiston. Esimerkiksi Minute-projekti poistetaan poistamalla hakemisto C:\Program Files\Microsoft Visual Studio\My Projects\Minute. Visual C++ -sovellusten luominen Visual C++ -ohjelman tekeminen ja suunnittelu Developer Studio ikkunan vasen osa on työtilaruutu (workspace). Projektin luomisen jälkeen tässä ruudussa on kolme välilehteä: ClassView, Resource View ja FileView. Näiden sivujen avulla voit liikkua projektisi kaikissa osissa. Voit halutessasi muuttaa työtilaruudun ja Developer Studio ikkunan muidenkin osien kokoa tarttumalla hiiren vasemmalla näppäimellä ruudun reunaan ja siirtämällä sitä pitäen hiiren näppäimen alhaalla. Sovelluksen koostaminen ja suorittaminen Koostamisen tarkoituksena on tehdä projektistasi suoritettava Windowstiedosto. Minute-projektissa tuon tiedoston nimeksi tulee Minute.exe. Kun olet saanut tehtyä tämän tiedoston, voit suorittaa sen Developer Studiosta käsin. Visual C++:n suoritettavat tiedostot ovat tavallisia Windowsin EXE-tiedostoja Minute.exe on aivan samanlainen suoritettava tiedosto kuin muutkin suoritettavat Windowstiedostot. Voit käynnistää sen Resurssienhallinnasta tai luoda sille pikakuvakkeen työpöydälle. Koostamisasetusten valinta Developer Studiolla voit tehdä ohjelmastasi joko kehitysversion (debug version) tai valmiin sovelluksen (release version). Tämä valinta on nimeltään koostamiskonfiguraatio (build configuration). Oletusvalinta on tehdä ohjelmasta kehitysversio ja saatkin käyttää näitä oletusasetuksia, kunnes toisin kerrotaan. Minute-ohjelmaa varten asetuksiin ei tarvitse puuttua. Oletuksena Developer Studio koostaa ohjelmasta version, jossa on mukana tiedot ohjelman debuggausta varten. Näiden tietojen avulla voit tutkia ohjelmakoodia rivi riviltä ja tarkkailla samalla muuttujien arvoja. Debuggaustiedot suurentavat kuitenkin koodin kokoa ja heikentävät sen suorituskykyä. Valmiin sovelluksen asetukset valitaankin usein vasta, kun ohjelma on valmis ja se koostetaan asiakkaille lähetettävään muotoonsa. KATSO MYÖS Opit lisää projektin debuggaamisesta luvussa 27. Kääntäminen ja linkittäminen Ohjelmaa koostettaessa projektin C++-lähdekooditiedostot käännetään ja sitten linkitetään yhteen suoritettavaksi tiedostoksi. Saat koostettua Minuteprojektin joko Build-painikkeella tai Build-valikosta komennolla Build Minute.exe tai F7-pikavalintanäppäimellä.
Visual C++ -ohjelman tekeminen ja suunnittelu Minute.exe sijaitsee nyt \Minute-projektihakemiston \Debug-alihakemistossa. Tässä alihakemistossa ovat projektin ohjelmien käännöksissä syntyneet objektitiedostot. Projektihakemistoon luotiin \Debug alihakemisto, koska valitsit kehitysversion koostamisen. Jos olisit valinnut koostettavaksi valmiin sovelluksen, nämä tiedostot olisi sijoitettu \Release alihakemistoon. Developer Studion alaosassa olevan tulosteruudun Buildsivulla näkyvät koostamisprosessin yksityiskohdat. Jos lähdekoodissa olisi virheitä, ne näkyisivät juuri tällä tulosteruudun sivulla (kuva 1.5). Koska tässä vaiheessa kaikki lähdekoodi on AppWizardin tekemää, ei virheitä pitäisi olla. OSA I LUKU 1 11 KUVA 1.5 Minute-projektin koostaminen. Sovelluksen suorittaminen Voit suorittaa sovelluksen napauttamalla työkalurivin Execute-painiketta tai valitsemalla Build-valikosta Execute Minute.exe tai Ctrl+F5 pikavalinnalla. Sovelluksesi pääikkuna tulee esiin tällöin kuvan 1.6 mukaisena.
12 Visual C++ -sovellusten luominen Visual C++ -ohjelman tekeminen ja suunnittelu KUVA 1.6 Minute-sovellus. Windows-käyttöliittymä Onnittelut! Olet nyt tehnyt C++ -kielellä toteutetun Windowssovelluksen. Tulet huomaamaan, että siinä on jo mukana muutamia kaikista Windows-ohjelmista tuttuja ominaisuuksia. Sovellusikkunassa on kaksi painiketta, OK ja Cancel ja lisäksi siinä näkyy kirjoitusta. Ikkunassa on myös otsikkopalkki, joka näyttää sovellukseen liitetyn kuvakkeen, sovelluksen nimen ja sulkemispainikkeen. Otsikkopalkista toimii järjestelmävalikko ja siitä ikkunaa voidaan siirtää ruudulla pitämällä hiiren vasenta näppäintä painettuna. Napauta nyt Minute-sovellusikkunan vasemmassa yläkulmassa olevaa MFC-kuvaketta. Valitse avautuvasta järjestelmävalikosta About Minute. Huomaat, että sovellukseesi kuuluu toinenkin ikkuna, nimeltään About Minute, jossa on tietoja tästä sovelluksesta (kuva 1.7). Valitse About Minute ikkunassa OK sulkeaksesi sen. Sulje Minute-sovellus napauttamalla OK-painiketta. KUVA 1.7 Minute-sovelluksen Aboutikkuna. Sovelluksen ulkoasun muuttaminen Projektin ulospäin näkyvät osat ovat nimeltään resursseja. Tällaisia ovat esimerkiksi valintaikkunat, valikot ja kuvakkeet. Resurssien suunnittelua ja sovelluksen ulkoasun muokkaamista varten Developer Studiossa on työkalu nimeltään resurssieditori.
Visual C++ -ohjelman tekeminen ja suunnittelu Painikekontrollin lisääminen Ennen kuin voit lisätä sovellukseen uuden painikkeen sinun on avattava muokattavaksi valintaikkunan mallipohja. OSA I LUKU 1 13 Minute-valintaikkunan mallin avaaminen 1. Valitse työtilaruudusta ResourceView-sivu. Saat esiin luettelon projektin resursseista. 2. Avaa resurssiluettelo napauttamalla Minute Resources tekstin vasemmalla puolen olevaa plusmerkkiä. Avaa myös Dialog-kansio. Esiin tulee kaksi valintaikkunatunnusta, IDD_ABOUTBOX ja IDD_MINUTE_DIALOG (kuva 1.8). KUVA 1.8 Valintaikkunatunnukset ResourceView-ruudussa. 3. Kaksoisnapauta IDD_MINUTE_DIALOG tunnusta. Näytölle tulisi ilmestyä Minute-sovelluksen pääikkuna kuvan 1.9 mukaisena. Valintaikkuna näkyy resurssieditorissa juuri saman näköisenä kuin sovelluksessakin. Nyt voit muokata valintaikkunan mallia resurssieditorin avulla.
14 Visual C++ -sovellusten luominen Visual C++ -ohjelman tekeminen ja suunnittelu KUVA 1.9 IDD_MINUTE_DIALOG -valintaikkunaresurssi. Seuraavaksi lisäät uuden painikkeen Minute-sovelluksen ikkunaan. Painikkeen lisääminen Minute-sovelluksen ikkunaan 1. Ennen painikkeen lisäämistä poista TODO-tekstikontrolli Minutevalintaikkunan keskeltä. Napauta tekstiä TODO: place dialog controls here; tällöin tekstin ympärille tulee suorakulmion muotoinen kehys (kuva 1.10). Paina nyt näppäimistön Deletenäppäintä ja tekstikontrolli katoaa sovelluksen ikkunasta. 2. Valitse kuvan 1.11 mukaisesti Controls-työkaluista painikekontrolli (Button).
Visual C++ -ohjelman tekeminen ja suunnittelu OSA I LUKU 1 15 KUVA 1.10 Oletustekstin poistaminen sovelluksen ikkunasta. KUVA 1.11 Painikekontrolli valitaan työkaluista.
16 Visual C++ -sovellusten luominen Visual C++ -ohjelman tekeminen ja suunnittelu 3. Vie hiiri nyt ikkunan päälle: kohdistin muuttuu tällöin ristin muotoiseksi ja osoittaa paikkaa, johon uusi painike asetetaan. Vie risti kauas OK- ja Cancel-painikkeista ja napauta hiiren vasenta näppäintä. Uusi painike, nimeltään Button1, jää ikkunaan (kuva 1.12). KUVA 1.12 Uuden painikkeen lisääminen valintaikkunaan. 4. Kun haluat muuttaa painikkeen tekstiä, varmista ensin, että se on valittuna ja sen ympärillä näkyy valintakehys (kuva 1.12). Ellei painike ole valittu, napauta sitä ja kirjoita tekstiksi Press Me. Kirjoittaessasi Push Button Properties ikkuna tulee esiin kuvan 1.13 mukaisesti. 5. Kirjoita ID-yhdistelmäruutuun painikken tunnukseksi IDC_PRESS_ME, mikä korvaa oletustunnuksen IDC_BUTTON1. Näin painikkeen tunnus tulee ymmärrettävämmäksi. 6. Varmista vielä, että Push Button Properties ikkunassa olevat tiedot täsmäävät kuvan 1.13 kanssa. 7. Sulje Push Button Properties ikkuna. Nyt IDD_MINUTE_DIALOG ikkunan uudessa painikkeessa pitäisi olla teksti Press Me.
Visual C++ -ohjelman tekeminen ja suunnittelu OSA I LUKU 1 17 1.13 Uuden painikkeen tekstin (Caption) ja tunnuksen (ID) muuttaminen. KATSO MYÖS Saat lisätietoja valintaikkunoiden suunnittelusta luvussa 3. Painikkeeseen liittyvää käsittelijäfunktiota käsitellään luvussa 4. Ohjelmakoodin liittäminen käyttöliittymään Sinulla on vihdoin sovelluksessasi uusi painike käytettäväksi ja tahdot luonnollisesti sen tekevän jotain. Tätä varten joudut kirjoittamaan hieman koodia, mutta älä hätäänny: sitä tulee vain yksi rivi. Ohjelmakoodin liittäminen painikkeeseen 1. Avaa Minute-sovellusikkuna resurssieditorissa. Ohjeet tähän löydät edellisestä kappaleesta. 2. Napauta Press Me painikkeen päällä hiiren oikeaa painiketta ja valitse esiin saamastasi valikosta Events-komento. New Windows Message and Event Handlers ikkuna avautuu (kuva 1.14).
18 Visual C++ -sovellusten luominen Visual C++ -ohjelman tekeminen ja suunnittelu KUVA 1.14 Lisää koodia vastaamaan hiiren painikkeen napautukseen. Jos (ohjelmaa suoritettaessa) Press Me painiketta napautetaan, Windows lähettää Minute-valintaikkunalle sanoman. New Windows Message and Event handlers ikkunassa nappaat kiinni tämän tapahtuman ja ohjaat ohjelmansuorituksen valitsemaasi koodilohkoon, joka käsittelee tämän tapahtuman. 3. Valitse New Windows Messages/Events luettelosta BN_CLICKED. Huomaa, että luettelon ensimmäinen jäsen on valittu oletukseksi. 4. Napauta Add and Edit painiketta. Saat esiin kuvan 1.15 mukaisen Add Member Function ikkunan. Tässä annat sen aliohjelman nimen, joka suoritetaan, kun valintaikkuna saa BN_CLICKED sanoman Press Me painikkeelta. 5. Hyväksy nimeksi oletusnimi OnPressMe OK-painikkeella. Uuden funktion runko tulee näkyviin muokkausikkunaan (kuva 1.16). Uusi funktio on lisätty CMinuteDlg luokkaan. Tämä luokka luotiin ja nimettiin automaattisesti, kun AppWizard loi projektin. Toistaiseksi funktiosi ei tee vielä mitään, joten joudut lisäämän siihen hieman koodia.
Visual C++ -ohjelman tekeminen ja suunnittelu OSA I LUKU 1 19 KUVA 1.15 Tapahtuman käsittelevän funktion nimeäminen. KUVA 1.16 OnPressMe() jäsenfunktion runko. 6. Muokkaa OnPressMe funktio listauksen 1.1 mukaiseksi.
20 Visual C++ -sovellusten luominen Visual C++ -ohjelman tekeminen ja suunnittelu LISTAUS 1.1 LSTO1_1.CPP Hiiren painikkeen napautuksen käsittelevän funktion toteutus 1 void CMinuteDlg::OnPressMe() 2 { 3 // TODO: Add your control notification handler code here 4 MessageBox("Thanks, I needed that!"); 5 } Tässä käytät valmista MessageBox()-funktiota näyttämään tekstin Thanks, I needed that! pienessä ikkunassa aina, kun Press Me - painiketta napautetaan. Muutokset tallennetaan automaattisesti projektia koostettaessa Visual Studio tallentaa automaattisesti tiedostoihin tehdyt muutokset ennen koostamisen aloittamista, joten et joudu erikseen tallentamaan muokkaamiasi tiedostoja. Muuttuneen ohjelman kokeileminen Kun teet muutoksia projektiisi ja haluat nähdä niiden vaikutuksen, joudut kääntämään ja suorittamaan ohjelmasi. Napauta siis Build-painiketta työkaluriviltä, valitse Build-valikosta Build Minute.exe tai paina F7- näppäintä. Tämä toiminto koostaa uudelleen suoritettavan Windowstiedoston ottaen huomioon kaikki resursseissa ja lähdekoodissa tehdyt muutokset. Jos käännöksen aikana löytyy virheitä, ne tulevat näkyviin Developer Studion ruudun alaosan tulosteikkunan Build-välilehdelle, kuten kuvassa 1.17 näkyy. Mikäli virheitä ilmenee, tarkista, että olet varmasti kopioinut listauksen 1.1 mukaisen OnPressMe-funktion koodin ohjelmaasi täysin samanlaisena. Korjaa koodia tarvittaessa ja napauta Build-painiketta niin kauan, ettei virheitä enää tule. Napauta tämän jälkeen Execute-painiketta, valitse Build-valikosta Execute Minute.exe tai näppäile Ctrl+F5. Nyt pitäisi Minute-valintaikkunan tulla esiin kuvan 1.18 mukaisesti. Napauta Press Me painiketta. Kuvan 1.19 mukaisen teksti-ikkunan pitäisi ilmestyä ruudulle näyttäen tekstin Thanks, I needed that! Kuittaa teksti-ikkuna OK-painikkeella. Jos napautat Press me painiketta uudelleen, näet tekstin toistamiseen. Syy tähän on se, että joka kerta painiketta napauttaessasi ohjelma suorittaa OnPressMe() funktion.
Visual C++ -ohjelman tekeminen ja suunnittelu OSA I LUKU 1 21 KUVA 1.17 Build-välilehdellä näkyviä virheitä. KUVA 1.18 Minute-sovellus käynnissä käyttöliittymän muokkaamisen jälkeen. KUVA 1.19 Lisätyn ohjelmakoodin toimintaa kokeillaan. Projektin tallentaminen ja sulkeminen Developer Studiota käyttäessäsi totut pian muokkaamaan välillä lähdekoodia, välillä resursseja ja tekemään monia muitakin toimia. Siksi onkin hienoa, että ohjelman koostamistoiminta (build) tallettaa tekemäsi muutokset aina ennen varsinaisen koostamisen suorittamista. Voit toki
22 *-merkki ilmoittaa tiedostoa muokatun Visual Studion otsikkopalkissa oleva tiedostonimi saa seurakseen *-merkin, kun tiedostoa on muokattu eikä muutoksia ole vielä tallennettu. Sama merkki näkyy myös ResourceView-sivulla Resource-kansion vieressä, jos projektissa on tallentamattomia resursseja. Visual C++ -sovellusten luominen Visual C++ -ohjelman tekeminen ja suunnittelu tallettaa itsekin tiedostosi milloin vain napauttamalla Save-painiketta, tai halutessasi tallettaa kaikki avoinna olevat tiedostot napauttamalla Save All painiketta. Projektin tallentamiseksi et joudu tekemään mitään. Kun lopetat tietyn projektin kanssa työskentelemisen, riittää, että suljet sen. Tämä käy Filevalikon Close Workspace komennolla tai yksinkertaisesti sulkemalla koko Developer Studion.