ActiveX-kontrollien käyttö



Samankaltaiset tiedostot
Visual C++ -ohjelman tekeminen ja suunnittelu

Kehitysympäristö LUKU. Developer Studio kehitysympäristön alkeet. Liikkuminen projektin työtilassa ja sen eri näkymissä

Tekstikontrollit LUKU. Tekstin ja sanomien esittäminen valintaikkunoissa. Tekstin muokkaaminen suorituksen aikana. Tiedon tarkistaminen syötön aikana

Usean näkymän luominen

erasmartcardkortinlukijaohjelmiston

Tiedostojen lataaminen netistä ja asentaminen

Hiirisanomiin vastaaminen

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

Web Services tietokantaohjelmoinnin perusteet

OHJE EXCEL-MAKRON LUOMISEKSI JA MAKRON KÄYTÖSTÄ

Valintanauhan komennot Valintanauhan kussakin välilehdessä on ryhmiä ja kussakin ryhmässä on toisiinsa liittyviä komentoja.

Skype for Business ohjelman asennus- ja käyttöohje Sisällys

Siirtyminen Outlook versioon

KUVANKÄSITTELY THE GIMP FOR WINDOWS OHJELMASSA

Outlook ja Yritysportaali Androidille

Eclipse 3.2 pikku opas versio 1.0. Esittely Uuden projektin perustaminen Sovelluksen luominen Koodin siistiminen Vinkkejä

HAMINETTI WLAN LIITTYMÄN KÄYTTÖÖNOTTO-OHJE

Written by Administrator Monday, 05 September :14 - Last Updated Thursday, 23 February :36

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

KESKUSTANUORTEN NETTISIVUT- OHJEITA PIIRIYLLÄPITÄJÄLLE 1. KIRJAUTUMINEN

Jypelin käyttöohjeet» Ruutukentän luominen

1 Tivax siirto uuteen koneeseen

Kansion asetusten muuttaminen Windows 2000 käyttöjärjestelmässä Resurssienhallinnan kautta

Office ohjelmiston asennusohje

Oppilaan pikaopas. Project 2013 käyttöliittymä ja näkymät

ASIO-OHJE HENKILÖSTÖLLE.

Olet tehnyt hyvän valinnan hankkiessasi kotimaisen StorageIT varmuuskopiointipalvelun.

Vahva tunnistautuminen Office palveluihin. MFA Suojauksen lisätarkistus

Ubuntu - tiedostohallinta

Sen jälkeen Microsoft Office ja sen alta löytyy ohjelmat. Ensin käynnistä-valikosta kaikki ohjelmat

Omien lomakkeiden käyttöönotto

MOODLE TUTUKSI. Pirkko Vänttilä Oulun aikuiskoulutuskeskus

Outlook ja vahva tunnistautuminen iphonelle

MDI-sovellusten kehittäminen

Asiakastukiryhmä Kesä- ja talviaika

NetMeetingiä voi käyttää esimerkiksi Internet puheluissa, kokouksissa, etätyössä, etäopiskelussa ja teknisessä tuessa.

VisualStudio Pikaopas, osa 1: WEB sivujen suunnittelu

CEM DT-3353 Pihtimittari

SoleMOVE lähtevän harjoittelijan ohje

Ohjeisto Trimble Pro 6H yhdistämisestä Juno 5:een

DNA Toimistoviestintä Microsoft - sähköposti

Outlook Web App ver 1.2

GPRS-lisäpalvelu INTERNET-ASETUKSET

Outlook ja Yritysportaali iphonelle

Webmailin käyttöohje. Ohjeen sisältö. Sähköpostin peruskäyttö. Lomavastaajan asettaminen sähköpostiin. Sähköpostin salasanan vaihtaminen

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Outlook ja Yritysportaali Androidille

Ajokorttimoduuli Moduuli 2. - Laitteenkäyttö ja tiedonhallinta. Harjoitus 1

Älä vielä sulje vanhoja

Windowsia verkkoyhteyksiin käyttäville asiakkaille

VisualStudio Pikaopas, osa 1: WEB-sivujen suunnittelu

Tilastokeskuksen rajapintapalveluiden käyttöönotto ArcGISohjelmistossa

Opus SMS tekstiviestipalvelu

TIETOKONEEN ASETUKSILLA PARANNAT KÄYTETTÄVYYTTÄ

Verkkosivut perinteisesti. Tanja Välisalo

Luettelo-, puu-, parannetun tekstiruutu- sekä HTML-näkymän käyttö

Skype for Business ohjelman asennus- ja käyttöohje Sisällys

Fiscal Media Server STD ohje

Microsoft Projectin mukauttaminen

Tik Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu KÄYTTÖOHJE. LiKe Liiketoiminnan kehityksen tukiprojekti

MEM-O-MATIC järjestelmä

Secure hubiin kirjautuminen

Verkkojulkaiseminen Minna Väisänen. HTML5-tehtävä

Nexetic Shield Unlimited

Outlook ja vahva tunnistautuminen Android-laitteelle

Tulosta yrityksesi tuloslaskelma ja tase myöhempää tarkastusta varten. Ota varmuuskopio tilanteesta ennen tilimuunnosta.

FrontPage Näkymät

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

JUnit ja EasyMock (TilaustenKäsittely)

Ensin klikkaa käynnistä-valikkoa ja sieltä Kaikki ohjelmat valikosta kaikki ohjelmat

Rajapinta (interface)

Tilastokeskuksen rajapintapalveluiden käyttöönotto QGIS-ohjelmistossa

KUVAN TUOMINEN, MUOKKAAMINEN, KOON MUUTTAMINEN JA TALLENTAMINEN PAINTISSA

Näin asennat MS-DOS käyttöjärjestelmän virtuaalikoneeseen

Ohjeistus yhdistysten internetpäivittäjille

WINDOWS MICROSOFT OUTLOOK 2010:N UUDET OMINAISUUDET...

Punomo Blogit BLOGIN LUOMINEN WORDPRESS-ALUSTALLA. Kirjaudu -palveluun osoitteessa tunnuksellasi.

erasmartcard-kortinlukijaohjelmiston asennusohje (mpollux jää toiseksi kortinlukijaohjelmistoksi)

Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.4.0

Asennuksessa kannattaa käyttää asennusohjelman tarjoamia oletusarvoja.

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:

1 eportfolio Kyvyt.fi - palvelun käytön aloittaminen

EASY Tiedostopalvelin - mobiilin käyttöopas

CLOUDBACKUP TSM varmistusohjelmiston asennus

Nexetic Shield Unlimited

RockID-varastonhallintajärjestelmän käyttöohje. v. 1.0

Google-dokumentit. Opetusteknologiakeskus Mediamylly

OHJEET WORDPRESS-BLOGIN LUOMISEEN JA TAVALLISIMPIIN BLOGITOIMINTOIHIN

Ksenos Prime Käyttäjän opas

OpenOffice.org Impress 3.1.0

Uudessa Excel-2007 on muutettuja / uusia ominaisuuksia jotka tulee huomioida kun Excel-2003 tehtyjä sovelluksia otetaan käyttöön Excel-2007:ssä.

Fontit ja tekstin selkeys

Facebook-sivun luominen

Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.3.0

Ohje 1 (12) Maarit Hynninen-Ojala MOODLE PIKAOHJE. Kirjautuminen Moodleen ja työtilan valitseminen

Pikaopas. Valintanauhan näyttäminen tai piilottaminen Avaa valintanauha napsauttamalla välilehteä, tai kiinnitä se pysyvästi näkyviin.

Kirjan toteutus BoD easybook -taittotyökalun avulla

Oppilaan opas. Visuaaliviestinnän Instituutti VVI Oy. Versio 0.2 ( )

Network Video Recorder. Pika-asennusohje

Transkriptio:

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 ja WWW Active Server Pages -toimintojen ansiosta webbisivuille voidaan lisätä ActiveX-kontrolleita ja palvelinpuolen skriptejä ja näin saada aikaan kehittyneitä webbipohjaisia sovelluksia. Valintaikkunat ja kontrollit Kuluneena vuosikymmenenä on ohjelmointimaailmassa keskitytty toipumaan 80-luvulla vaivanneesta pyörän uudelleen keksimisestä. Tuon vaivannäön tuloksena on yleistynyt olio-ohjelmointi (object oriented programming) ja syntynyt COM/OLE-tekniikka (COM = Komponenttiobjektimalli / OLE = Objektien linkitys ja upotus). Nykyään voit ostaa hyvinkin kehittyneitä ActiveX-kontrolleja, jotka voidaan helposti liittää sovellukseesi ja näin ne säästävät tuntien, viikkojen tai jopa kuukausien ohjelmointityön. Tarjolla on runsaasti erilaisia kontrolleja ilmaiseksi tai shareware-oikeuksilla hankittavaksi. Jos pidät kontrollien tekemisestä, voit levittää niitä ilmaiseksi tai myydä niitä muille kehittäjille. Näistä tekniikoista hyötyvät kaikki, koska ohjelmistot ovat nopeammin kehitettävissä, ne on edullisempia ja yhä kehittyneempiä. KATSO MYÖS Jos haluat tehdä itse ActiveX-kontrolleja, perehdy lukuun 26. Lisätietoja COMista ja OLEsta luvussa 25. ActiveX-kontrollien valitseminen ja lisääminen sovellukseen komponenttigalleriasta Komponenttigalleria (Component Gallery) on joukko komponentteja, joita voit lisätä sovelluksesi osiksi saadaksesi siihen lisäominaisuuksia. Visual C++:n mukana saat laajan valikoiman ActiveX-kontrolleja suoraan käytettäväksi ja voit lisätä itse niitä (milloin vain) valikoimaa laajentaaksesi. ActiveX-kontrollit perustuvat COM-tekniikkaan, joten niitä voidaan käyttää Visual C++:sta, Visual Basicista, Visual J++:sta ja monista muista COM-objekteja ymmärtävistä ohjelmointikielistä. Tästä syystä kontrollien dokumentoinnissa käytetään usein Visual Basic-esimerkkejä tästä ei pidä säikähtää, koska täysin samoja metodeja voidaan käyttää myös Visual C++-sovelluksissa. ActiveX-kontrollien selaaminen Voit luoda harjoittelua varten AppWizardilla valintaikkunasovelluksen, johon saat lisättyä ActiveX-kontrolleja. Tee siis uusi ActiveX-niminen projekti (luvussa 4 annettujen ohjeiden mukaan).

Uudesta sovelluksestasi voit hakea luettelon järjestelmääsi rekisteröidyistä ActiveX-kontrolleista seuraavassa esitettyjen vaiheiden avulla. OSA II LUKU 9 183 ActiveX-kontrollien selaaminen komponenttigalleriasta 1. Napauta Project-valikkoa ja valitse siitä Add to Project alivalikko. 2. Valitse Components and Controls komento alivalikosta. 3. Kaksoisnapauta Components and Controls Gallery ikkunassa Registered ActiveX Controls kansiota. 4. Nyt sinulla pitäisi olla esillä luettelo järjestelmääsi rekisteröidyistä ActiveX-kontrolleista, kuten kuvassa 9.1. KUVA 9.1 Komponenttigalleriassa esitettävät rekisteröidyt ActiveX-kontrollit. 1 ActiveX Calendar-kontrollin suoritettava koodi sijaitsee tässä.ocx-tiedostossa (tämä versio tuli Office97:n mukana, ja omasi saattaa olla vanhempaa versiota tai jopa puuttua, riippuen asennetuista ohjelmista). 1 Huomaa, että komponenttigalleriassa kontrollit esitetään tuttuina Windowsin pikavalintoina. Varsinainen kontrollin ohjelmatiedosto löytyy ikkunan alareunassa esitetyssä Path to Control -ruudusta. ActiveX-kontrollit sijaitsevat joko.ocx tai.dll-tiedostossa, joten jakaessasi sovellusta muista myös levittää nämä sovellukseen liittyvät tiedostot sekä rekisteröidä ne kohdekoneessa. Kontrollit rekisteröidään regsrv32.exe-ohjelmalla Windowsin Käynnistä-valikon Suoritakomennolla (Start/Run) tai suoraan komentokehotteesta esimerkiksi

184 Valintaikkunat ja kontrollit näin: Regsrv32 C:\Windows\System\mscal.ocx Tämä rekisteröi ActiveX-kalenterikontrollin ja on välttämätöntä tehdä ainoastaan, kun jakelet tai asennat uusia kontrolleja; juuri komponenttigalleriassa näkemäsi kontrollit on jo rekisteröity järjestelmääsi. Jos valitset jonkun kontrollin, saattaa More Info painike muuttua aktiiviseksi. Tällöin saat painiketta napauttamalla esiin tutun Ohjeikkunan, jossa kerrotaan kontrollista ja sen käytöstä. Ohjesivuilta näet, että ActiveX-kontrolleilla on tavallisten Windowskontrollien tavoin joukko tapahtumia (events), ominaisuuksia (properties) ja metodeja (method). Ominaisuuksia muokkaamalla muutat samalla kontrollin ulkoasua. Metodeilla voit lukea tietoa kontrolleista tai kirjoittaa tietoa niihin. Tapahtumat kutsuvat koodiasi, kun käyttäjä tekee jotain kontrollille (esimerkiksi napauttaa painiketta). Uusien kontrollien lisääminen projektiisi Saat lisättyä valintaikkunasovellukseesi kalenterikontrollin napauttamalla kontrollien valintaluettelossa Calendar Control 8.0 pikakuvaketta. Kun olet valinnut tämän kontrollin, voit lisätä sen sovellukseesi Insert-painikkeella. Developer Studio varmistaa vielä, haluatko lisätä kontrollin ( Insert This Component? ), jonka kuittaat OK-painikkeella. Saat esiin uuden Confirm Classes ikkunan (kuva 9.2). Tässä ikkunassa kerrotaan, mitä tiedostonimiä projektiisi lisätään kontrollin tarvitsemien liittymäluokkien lisäämiseen (interface classes, dispatch classes). Voit muuttaa näiden luokkien ja tiedostojen nimet tarvittaessa tässä ikkunassa. Yleensä oletusnimet kelpaavat, ellet jo ole käyttänyt saman nimisiä tiedostoja tai luokkia projektissasi. Voit myös poistaa lisättävien luokkien valinnan, mutta yleensä esitetyt luokat lisätään mukisematta.

OSA II LUKU 9 185 KUVA 9.2 Confirm Classes ikkunassa voit muuttaa kontrollin tiedostonimen. Jos jätät oletusasetukset ennalleen ja napautat OK-painiketta, uudet luokat ja vastaavat tiedostot lisätään projektiisi. Saat nämä luokat näkyviin valitessasi projektin työtilaikkunasta ClassView-näkymän suljettuasi Components and Controls Gallery ikkunan. Kaksi uutta luokkaa, CCalendar ja COleFont, sisältävät Calendar-kontrollin ja sen käyttämän fontin käyttämiseen tarvittavat funktiorungot. Mitä nämä funktiorungot ovat? Katsopa esimerkiksi CCalendarluokan viereistä plusmerkkiä ja sillä esiin tulevaa GetBackColor()- funktiota napauttamalla, miltä funktion toteutus näyttää: unsigned long CCalendar::GetBackColor() { unsigned long result; InvokeHelper(DISPID_BACKCOLOR, DISPATCH_PROPERTYGET, VT_I4, (void*)&result, NULL); return result; } Kaikki muut funktiot ovat myös tällaisia funktion pätkiä, stubeja, tai hakufunktioita (dispatch funktion). Voit kutsua niitä aivan tavallisten funktioiden tapaan, mutta funktiot toteuttava koodi sijaitsee joka tapauksessa kontrollin.ocx- tai.dll-tiedostossa. Nämä funktion pätkät kutsuvat oikeaa koodia COM-rajapinnan kautta InvokeHelper()-funktiolla. Funktiolle syötetyt parametrit muutetaan ennen lähettämistä tai palauttamista Variant-tyyppisiksi. Tästä on hyötyä kolmessa suhteessa. VBX:t, Visual Basic - kontrollit ja yhteensopivuus Olet ehkä kuullut joskus VBXkontrolleista - kyseessä olivat Visual Basicin kontrollit, OCX:ien edeltäjät. Vaikka nämä toimivat OCX:istä poikkeavasti, niitä voitiin käyttää 16-bittisen Visual C++ -kääntäjän kanssa.vbxkontrollit eivät kuitenkaan ole yhteensopivia32-bittisen Visual C++:n eikä 32-bittisten ohjelmien kanssa;joudut käyttämään nykyaikaisissa 32- bittisissä ohjelmistoissa OCXkontrolleja (ActiveX-kontrolleja).

186 Valintaikkunat ja kontrollit Ensiksikin se pienentää sovelluksen kokoa, koska koodia tarvitaan vain funktion pätkiin. Toiseksi oma koodisi on yhteensopiva kontrollien uudempiinkin versioihin (olettaen, että kontrollin tekijä säilyttää vanhat rajapinnat), joten käyttäjät voivat päivittää kontrolleja päivittämättä sovellusta. Kolmanneksi järjestely suojaa kontrollin tekijää, koska kontrollin lähdekoodi ei ole saatavilla. KATSO MYÖS Lisätietoja COMista ja OLEsta luvussa 25. ActiveX-kontrollien valitseminen, muokkaaminen ja testaaminen Control-palkista Projektiin ei lisätty pelkästään uuden kontrollin rajapintaluokkia, vaan koko kontrolli on myös lisätty resurssieditorin Controls-palkkiin. ActiveX-kontrollin lisääminen valintaikkunaan Voit käyttää uutta kalenterikontrollia omassa valintaikkunassasi. Valitse siis ResourceView-välilehti ja avaa ActiveX-projektin resurssit nähdäksesi resurssityypit. Avaa sitten Dialog-kansio ja kaksoisnapauta IDD_ACTIVEX_DIALOG nimeä ja pääset muokkaamaan projektin pääikkunaa. Kasvata valintaikkuna sopivan kokoiseksi ja poista sen keskeltä // TODO: Place dialog controls here teksti. Nyt Control-palkin viimeisenä kuvakkeena on uusi kuvake kalenterikontrollia varten (kuva 9.3). KUVA 9.3 Uusi ActiveX-kalenterikontrolli on lisätty Controls-palkkiin. 1 Calendar-kontrolli 8.0:n kuvake 1 Voit raahata tämän kontrollin valintaikkunaasi aivan muiden kontrollien tavoin. Kun kontrolli on valintaikkunassa, sen kokoa voidaan muuttaa aivan kuten muidenkin kontrollien. Tasaa kontrolli valintaikkunan vasempaan yläkulmaan. Saatat joutua vielä kasvattamaan valintaikkunankin kokoa, sillä Calendar-kontrolli on melko kookas.

ActiveX-kontrollien lisääminen valintaikkunaeditorista Voit lisätä ActiveX-kontrollin projektiin myös ilman komponenttigallerian käyttöä, suoraan valintaikkunaeditorissa. Napauta valintaikkunan päällä (ei kontrollin päällä) hiiren oikeaa painiketta ja saat esiin pikavalikon. Valitse tästä Insert ActiveX Control ja saat esiin vastaavat ikkunan. Insert ActiveX Control ikkunassa näet luettelon järjestelmään asennetuista ActiveX-kontrolleista, joista voit valita ikkunaan lisättävän kontrollin. Valitse tästä luettelosta Microsoft Multimedia Control, version 6.0. Napauttaessasi OK uusi kontrolli tulee näkyviin. MCI-kontrolli (Media Control Interface, multimediasovitin), joka näyttää valkoiselta suorakulmiolta valintaikkunan suunnittelun aikana, tulee sijoittaa ikkunan vasempaan alakulmaan. Tällä keinoin lisättyyn kontrolliin ei tehdä automaattisesti rajapintaluokkia, mutta ne voidaan lisätä ClassWizardilla liittämällä kontrolliin jäsenmuuttujan. Tämä toimenpide on esitetty myöhemmin tässä luvussa. MCI-kontrolli sisältää joukon painikkeita, jotka voidaan liittää eri multimedialaitteisiin. Tällaisia ovat esimerkiksi waveaudio.waväänitiedostojen esittämiseen, cdaudio CD-levyjen soittamiseen ja digitalvideo videopätkien esittämiseen. OSA II LUKU 9 187 Kontrollien testaaminen valintaikkunaeditorista Voit testata kontrollit aivan kuten valintaikkunan muutkin kontrollit. Napauta siis Layout-valikon Test-komentoa (tai näppäile Ctrl+T). Nyt ActiveX-kontrollit toimivat aivan kuin valmiissa sovelluksessa ja voit kokeilla niitä (kuva 9.4). KATSO MYÖS Lisätietoja valintaikkunan muokkaamisesta luvussa 3. Oppiaksesi lisää MCI:stä ja API-kirjastoista, katso lukua 28.

188 Valintaikkunat ja kontrollit KUVA 9.4 ActiveX-kontrolleja sisältävän valintaikkunan testaaminen Kontrollin ominaisuuksien muuttaminen resurssieditorissa ActiveX-kontrolleissa voidaan tavallisten kontrollien tavoin asettaa useita ominaisuuksia Properties-ikkunan välilehdiltä. Kun kontrolliin on liitetty jäsenmuuttuja, näihin ominaisuuksiin pääsee käsiksi ohjelmasta rajapintaluokan funktioiden kautta. Niitä voi käsitellä myös kontrollin itsensä luomien ominaisuussivujen kautta resurssieditorissa. Pääset näille sivuille valitsemalla kontrollin ja näppäilemällä Alt+Enter tai valitsemalla pikavalikosta Properties. Vakio-ominaisuuksien asettaminen Kontrollin ominaisuuksia muokatessa tarjolla on myös General-sivu. Tavallisten kontrollien tapaan voit asettaa tällä sivulla kontrollin IDtunnuksen yksilölliseksi sekä normaaleja sallinta- ja näkyvyyslippuja. Napauta hiiren oikealla painikkeella ActiveX-kalenterikontrollia ja valitse pikavalikosta Properties Calendar Control: näin saat esiin kalenterikontrollin ominaisuudet. Muuta sitten kontrollin ID-tunnus oletusarvosta IDC_CALENDAR1 tunnukseksi IDC_CALENDAR. Muuta samoin Microsoftin Multimediakontrollin tunnukseksi IDC_MMCONTROL. Kontrollin ominaisuussivujen käyttö Loput ominaisuussivut määrittää kontrolli itse. Valitse uudelleen kalenterikontrolli ja sen Control-välilehti. Nyt esillä on useita kontrolliin itseensä liittyviä ominaisuuksia (kuva 9.5).

OSA II LUKU 9 189 KUVA 9.5 Calendar-kontrollin ominaisuudet Näillä ominaisuuksilla määrätään, miltä kontrolli näyttää ja kuinka se käyttäytyy. Kokeile joidenkin ominaisuuksien muuttamista ja testaa, miten kontrollin toiminta ja ulkonäkö eroavat aiemmasta (voit joutua siirtämään Properties-ikkunaa, ettei se peitä kontrollia). Kalenterikontrollin attribuutit muuttavat kontrollinäyttöä varsin laajalla skaalalla. Valitse seuraavaksi Font-sivu. Huomaa, että tässä voit muuttaa kontrollissa käytettäviä fontteja ja niiden kokoja. Jos valitset Colorsivun, huomaat, että myös kontrollin värejä voidaan räätälöidä. Viimeinen välilehti on All-sivu. Tämä sivu on yhteinen kaikille ActiveX-kontrolleille ja siinä on lueteltu kaikki kontrollin ominaisuudet nykyisine asetuksineen. Tämä luettelo tehdään kontrollin julkaisemien OLE-ominaisuuksien perusteella; nämä ominaisuudet ovat käytettävissä myös kontrollin luokista Get- (lue) ja Set-funktioiden (aseta) kautta. Niinpä esimerkiksi BackColor-ominaisuutta voidaan käsitellä ohjelmasta vastaavilla GetBackColor()- ja SetBackColor()-funktioilla. Sulje Calendar Control 8.0 Properties ikkuna, napauta multimediakontrollia hiiren oikealla painikkeella ja valitse Properties MMControl Object ja saat esiin multimediakontrollin ominaisuudet. Jos tutkit ikkunasta eri välilehtiä, huomaat, että General- ja All-sivut ovat hyvin samankaltaisia kuin kalenterikontrollillakin, mutta muut sivut poikkeavat täysin. Esimerkiksi multimediakontrollin Controlssivulta voit ottaa käyttöön painikkeita yksitellen (Enabled) ja piilottaa ne (Visible = näkyvissä). Poista valinnat EjectVisible ja RecordVisible (kuva 9.6). Sulje ikkuna ja kokeile valintaikkunaasi näppäilemällä Ctrl+T. Huomaat, että kaksi painiketta on kadonnut ja että koko painikerivistö on lyhentynyt.

190 Valintaikkunat ja kontrollit KUVA 9.6 Microsoft Multimedia Control kontrollin Controls-sivulta voit valita esillä olevat painikkeet yksitellen. Kontrolliluokkien käyttö Tähän mennessä emme ole tarvinneet ActiveX-kontrollien kanssa riviäkään koodia ja voit tosiaankin testata sovellusta jo tässä vaiheessa ja kokeilla kontrolleja. Tavallisten kontrollien tavoin joudut kuitenkin lukemaan kontrollin tietoja ja asettamaan niitä ohjelmasta käsin. Yleensä kontrollin ID-tunnus liitetään kontrolliluokan jäsenmuuttujaan osaksi valintaikkunaluokkaa. ActiveX-kontrollit eivät poikkea tästä ja ClassWizardilla saat tarvittavat koodirivit. Kontrollin kutsuluokan jäsenmuuttujan lisääminen ClassWizard käynnistetään resurssieditorista Ctrl+W -näppäilyllä tai valitsemalla View-valikosta ClassWizard. Valitse MFC Class Wizard ikkunassa Member Variables välilehti ja saat esiin käytettävissä olevat kontrollien tunnukset Control IDs luettelona. Näet, että IDC_CALENDAR ja IDC_MMCONTROL -tunnukset valintaikkunasta voidaan liittää CActiveXDlg-valintaikkunaluokkaan. Jos valitset IDC_CALENDARin ja napautat Add Variable painiketta, saat esiin vastaavan ikkunan. Voit liittää ActiveX-kontrollin sitä vastaavaan kutsu- tai rajapintaluokkaan. Tästä syystä Category-yhdistelmäruudussa sallitaan ainoastaan Control-vaihtoehto ja kalenterikontrollille Variable Type voi olla ainoastaan CCalendar. Syötä jäsenmuuttujan nimeksi m_calendar ja napauta OK lisätäksesi

tämän jäsenmuuttujan. Tällä kertaa näet ikkunan, joka kertoo, että projektiisi ei ole lisätty multimediakontrollia ja jossa pyydetään lupaa lisätä se. (kuva 9.7). OSA II LUKU 9 191 KUVA 9.7 ClassWizard pyytää lupaa lisätä ActiveX C++ pakettiluokka. Napauta OK ja saat esiin saman varmistusikkunan (Confirm Classes), jonka näit valittuasi komponenttigalleriasta Calendar-kontrollin, tällä kertaa ikkunassa esitetään kuitenkin multimediakontrollin luokkia. Voit jälleen muuttaa halutessasi luokkien ja tiedostojen nimiä. Kun olet valmis, napauta OK ja voit jatkaa Adding Member Variable ikkunaan, jossa voit liittää Cmci-tyyppisen jäsenmuuttujan valintaikkunaluokkaan. Syötä Member Variable Name ruutuun m_mci ja lisää uusi jäsenmuuttuja napauttamalla OK. Liitettyäsi nyt kontrolleille jäsenmuuttujat valintaikkunaluokkaan, voit kutsua kontrolleja koodistasi lukeaksesi ja kirjoittaaksesi niiden arvoja. Kontrollin ominaisuuksien lukeminen ja asettaminen Nyt voit lisätä hieman koodia alustamaan kontrollit valintaikkunan OnInitDialog()-funktioon listauksen 9.1 mukaisesti. Kalenterikontrollilla on Today()-funktio, joka asettaa sen hetkisen päiväyksen. Multimediakontrolli voidaan asettaa esittämään.wav-tiedosto ääninäytteenä. LISTAUS 9.1 LST9_1.CPP ActiveX kalenteri- ja multimediakontrollien alustaminen OnInitDialog()-funktiossa. 1 // TODO: Add extra initialization here 2 3 // ** Set the calendar to today 4 m_calendar.today(); 5 6 // ** Set up the mci waveaudio device to play 7 // ** The Microsoft Sound.wav file 8 m_mci.setnotify(false); 9 m_mci.setwait(true); 10 m_mci.setshareable(false);

192 1 MCI-kontrolliin voidaan liittää medialeiketiedosto, jolloin painikkeet ohjaavat leikkeen esittämistä ja pysäyttämistä. Valintaikkunat ja kontrollit 11 m_mci.setdevicetype("waveaudio"); 12 m_mci.setfilename("c:\\windows\\media\\themic~1.wav"); 1 13 m_mci.setcommand("open"); 14 15 return TRUE; // return TRUE unless you set the focus 16 } Listauksessa 9.1 ActiveX kalenterikontrolli asetetaan tähän päivään kutsumalla kontrollin Today()-pätkäfunktiota. Multimediakontrollin asettaminen on hieman mutkikkaampaa, koska sitä voidaan käyttää ohjaamaa useita erilaisia laitteita ja se on näin ollen asetettavissa monella tavoin. Riveillä 8-13 asetetaan Multimediakontrolli esittämään.wav-tiedosto nimeltä Microsoft Sound MCI-laitteella waveaudio. Huomaa, että rivillä 12 annetussa tiedostonimessä käytetään kahta kenoviivaa (\\) yhden sijaan hakemistopoluissa. Tämä johtuu kenoviivan erikoismerkityksestä erikoismerkkien esittämisessä C++:ssa ja vasta kaksi peräkkäistä kenoviivaa merkitsee yhtä oikeaa. Tässä tiedostonimi on esitetty DOS-yhteensopivassa muodossa TheMic~1.wav. Löydät tiedoston helposti Resurssienhallinnalla hakemistosta C:\Windows\Media nimellä The Microsoft Sound. Hakemistojen nimet Windows NT:ssä Huomaa, että Windows NT:ssä hakemistopolun osa C:\Windows tulee korvata hakemistolla C:\WINNT, koska Windowstiedostot sijaitsevat siinä oletuksena. Ellet löydä tiedostoa Resurssienhallinnalla, mikä tahansa -Wav-tiedosto käy, kunhan tiedostonimi ja hakemisto ovat oikein. Joudut lisäämään vielä yhden toiminnon. Listauksen 9.1 rivillä 13 avattu waveaudio-multimedialaite tulee myös sulkea järjestelmäresurssien oikean ylläpidon mukaisesti. Paras hetki tähän on, kun valintaikkuna tuhotaan. Voit lisätä virtuaalisen jäsenfunktion DestroyWindow() seuraavasti: Virtuaalifunktion lisääminen valintaikkunaluokkaan 1. Napauta projektin työtilaikkunassa ClassView-välilehteä. 2. Napauta ylintä plusmerkkiä ja näet projektin luokat. 3. Napauta hiiren oikeaa painiketta CActiveXDlg-luokan päällä ja saat esiin pikavalikon. 4. Valitse Add Virtual Function komento ja saat esiin New Virtual Override ikkunan. New Virtual Functions luettelossa tulisi näkyä DestroyWindow-virtuaalifunktio. 5. Napauta Add and Edit painiketta ja pääset muokkaamaan uutta käsittelijää. Tätä funktiota tullaan kutsumaan, kun valintaikkuna tuhotaan; voit siis lisätä funktioon toisen ActiveX-multimediakontrolli m_mci:n SetCommand()-funktiokutsun sulkeaksesi waveaudio-laitteen näin:

OSA II LUKU 9 193 BOOL CActiveXDlg::DestroyWindow() { // TODO: Add your specialized code here and/or call the m_mci.setcommand( Close ); return CDialog::DestroyWindow(); } Multimedialaite suljetaan kunnolla, joten nyt voit kääntää ja suorittaa sovelluksesi. Huomaa, että kalenterikontrolli on nyt asetettu nykypäivään (kunhan koneesi kello on ajassaan) ja että Play-painike (>) on käytettävissä. Kun napautat Play-painiketta, ohjelma esittää Microsoft Sound ääninäytteen. Esittämisen aikana Pause-painike muuttuu käytettäväksi ja voit keskeyttää sillä äänen esittämisen. Esittämisen loputtua voit käynnistää toiminnon uudelleen vasta takaisinkelauksen (Rewind, <) jälkeen. ActiveX-luokkien CCalendar ja Cmci jälkeen esitetyistä löydät monta muutakin kontrollin käyttämiseen tarkoitettua funktiota. Muista myös, että saat lisätietoa kontrolleista Component and Controls Gallery ikkunassa napauttamalla More Info painiketta. Tässä oli ainoastaan kaksi niistä monista komponenttigalleriassa tarjolla olevista kontrolleista; lisää kontrolleja löydät Internetistä ja monia käytetään myös webbisivuillakin. Tämän yksinkertaisen koodin takaa löytyvä vahvuus alkanee vähitellen seljetä: se on COMin tarjoama uudelleenkäytettävyys. ActiveX-tapahtumankäsittelijöiden toteuttaminen ClassWizardilla Luonnollisesti olisi varsin rajoittunutta, ellet voisi käyttää käyttäjän aikaansaamia sanomia kontrolleista. Onneksi kontrollit voivat käynnistää tapahtumia myös sovelluksessasi. Voit lisätä käsittelijät näille tapahtumille tuttuun tapaan lisäämällä tapahtumankäsittelijän ClassWizardilla tai New Window Messages/ Events ikkunassa. Voit esimerkiksi lisätä käsittelijän havaitsemaan, milloin käyttäjä on napauttanut kalenterikontrollia. ActiveX-kontrollien luominen dispatch-luokassa Jos tutkit tarkempaan CCalendar ja Cmci-luokkien määrittelyjä (tiedostoissa calendar.h ja mci.h), huomaat, että molemmat on johdettu CWnd-luokasta. Tämä tarkoittaa, että säilösovellus voi käsitellä niitä aivan ikkunoiden tapaan (kuten muitakin kontrolleja). Create()- funktio, joka on CWnd-luokassa määritelty virtuaalifunktio, korvataan dispatch-luokissa kutsulla CWnd:n CreateControl()- funktioon, joka luo tavallisen ikkunan sijaan OLE-kontrollin (ActiveX-kontrollin).

194 Valintaikkunat ja kontrollit ActiveX-tapahtumankäsittelijä lisääminen ClassWizardilla 1. Käynnistä ClassWizard näppäilemällä Ctrl+W tai valitsemalla View-valikosta ClassWizard. 2. Varmista, että Message Maps välilehti on valittu. 3. Valitse Class Name yhdistelmäruudusta CActiveXDlg, ellei se ole jo valittu. 4. Valitse Object IDs luettelosta IDC_CALENDAR. 5. Kaksoisnapauta Messages-luettelossa Click-sanomaa ja saat esiin Add Member Function ikkunan. 6. Hyväksy oletusnimi OnClickCalendar napauttamalla OK. 7. Napauta Edit Code painiketta ja voit aloittaa uuden käsittelijäfunktion muokkaamisen. Nyt näkyvissä pitäisi olla editorin ikkunassa uusi OnClickCalendar()-funktio; tätä kutsutaan aina, kun kalenterikontrollia napautetaan ja päiväys muuttuu. Voisit esittää uuden päiväyksen valintaikkunasi otsikkopalkissa päiväyksen muuttuessa lisäämällä listauksessa 9.2 esitetyn koodin uuteen käsittelijäfunktioon. LISTAUS 9.2 LST9_2.CPP Käsittelijän lisääminen ActiveXkalenterikontrollin lähettämälle Click-tapahtumalle 1 VARIANT-tietorakenne muutetaan COleDateTimeksi muodostimella. 1 void CTestcalDlg::OnClickCalendar() 2 { 3 // TODO: Add your control notification handler code here 4 5 // ** Convert the VARIANT calendar value 6 COleDateTime dtchosendate(m_calendar.getvalue()); 1 7 8 // ** Format Ole date to a sensible default and display 9 // ** it in the dialog title bar. 10 SetWindowText(dtChosenDate.Format("You Chose %#x")); B} Listauksessa 19.2 käytetään rivillä 6 m_calendar-olion GetValue()- jäsenfunktiota hakemaan Calendar-kontrollista valittu päiväys. Jos napautat ClassView-sivulla CCalendar-luokan alta löytyvää GetValue()-jäsenfunktiota, näet, että se palauttaa VARIANT-tyyppisen paluuarvon:

OSA II LUKU 9 195 VARIANT CCalendar::GetValue() { VARIANT result; InvokeHelper(0xc, DISPATCH_PROPERTYGET, VT_VARIANT, (void*)&result, NULL); Return result; } VARIANTon struktuuri, jossa voi olla useita tietotyyppejä. Tämä on toteutettu siten, että struktuurissa on jokaisen tietotyypin tyyppinen muuttuja ja nämä on yhdistetty unioniksi (C++:n unioni tarkoittaa, että unionin jäsenet sijaitsevat samassa osoitteessa). Struktuurissa on myös VARTYPE-tyyppinen jäsen vt, joka esittää, minkä tyyppistä tietoa VARIANT-rakenteessa on. Tulet näkemään VARIANT-muuttujia ja sen paketoivaa MFC-luokkaa COleVariant useinkin COM/OLE-maailmassa. Tämä on keino saada eri sovellukset siirtämään tietoa, joka muuten saattaisi tarkoittaa eri ohjelmointikielillä eri asiaa ja näin mahdollistetaan tiedon tallettaminen ja lukeminen. Onneksi joudut käyttämään VARIANT-tyyppejä varsin harvoin, koska MFC-luokat tunnistavat VARIANT-tyyppiset muuttujat ja muuttavat ne tutummiksi MFC-luokiksi. Listauksessa 19.2 tämä muunnos tehdään rivillä 6, jossa GetValue()-funktion palauttama VARIANTsyötetään suoraan dtchosentime-olion muodostimelle käytettäväksi COleDateTime-oliona. VARIANTon olio, joka tallettaa ja muokkaa päiväyksiä ja kellonaikoja. Sillä on käyttökelpoinen Format()-funktio, jolla voidaan muotoilla olion tallettama aika CString-tekstiksi syöttämällä funktiolle sopivia lippuja. Rivillä 10 Format()-funktiolle syötetty %#x-lippu muuttaa VARIANT-olion tallettaman päiväyksen pitkään muotoon: viikonpäivä, kuukausi, päivä kuukaudesta, vuosi (esimerkiksi Wednesday, April 28, 1999). Tämä CString-tyyppinen muotoiltu päiväys voidaan välittää suoraan SetWindowText()-funktiolle, joka asettaa käyttäjän valitseman päiväyksen ikkunan otsikkopalkin tekstiksi. Kun käännät ja suoritat ohjelmasi lisättyäsi nämä rivit käsittelijäfunktioon, näet kalenterikontrollia napauttamalla valitun päiväyksen sovellusikkunasi otsikkopalkissa, kuten kuvassa 9.8. KATSO MYÖS Yksityiskohtia sanomien ja tapahtumien käsittelystä luvun 4 alussa. Tietoa omien ActiveX-kontrollien luomisesta luvussa 26. Lisätietoja COMista ja OLEsta luvusta 25. Aika/Päiväys-luokat MFC-kirjastossa on neljä luokkaa kaikenlaista ajan ja päiväyksen käsittelemistä ja tallentamista varten. Alkuaan luokkia oli vain kaksi, CTime ja CTimeSpan, jotka perustuivat UNIXin time_t-järjestelmään (4- tavuinen long-arvo), joka ilmaisi vuoden 1970 alusta kuluneiden sekuntien määrän. Yhden sekunnin tarkkuus ja rajallinen päiväyksenkäsittely rajoitivat sen soveltuvuuttaa joihinkin sovelluksiin. Tästä syystä uudemmissa OLE-sovelluksissa käytetään luokkia COleDateTime ja COleDateTimeSpan. COleDateTime perustuu piilotettuun DATE-tietorakenteeseen (joka on oikeastaan vain double-arvo). Tämän tietotyypin tallennuskapasiteetti mahdollistaa päiväykset vuodesta 100 vuoteen 9999 ja noin millisekunnin tarkkuuteen. Kahden COleDateTime-olion ilmaiseman ajan ero esitetään ja sitä muokataan COleDateTimeSpan-olion kautta.

196 Valintaikkunat ja kontrollit KUVA 9.8 ActiveX-kontrollin lähettämää tapahtumaa käytetään päivittämään ikkunaa.