Visual C++ 6 Ohjelmoijan käsikirja



Samankaltaiset tiedostot
E s i t y s g r a f i i k k a a s e l k o k i e l e l l ä MICROSOFT. PowerPoint. P e t r i V a i n i o P e t r i I l m o n e n TIKAS-SARJA

Visual C++ -ohjelman tekeminen ja suunnittelu

Verkkoposti selkokielellä

T e k s t i n k ä s i t t e l y ä s e l k o k i e l e l l ä WORD

FrontPage Näkymät

Tekstinkäsittelyn jatko Error! Use the Home tab to apply Otsikko 1 to the text that you want to appear here. KSAO Liiketalous 1

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

Taulukot Päivi Vartiainen 1

Taulukkolaskentaa selkokielellä EXCEL

1 Copyright Juha-Pekka Ruuska

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

ECDL Esitysgrafiikka. Copyright 2015 ECDL Foundation ECDL Esitysgrafiikka Sivu 1 / 7

ATK yrittäjän työvälineenä

Yleistä Windowsin pikanäppäimistä

Tietosuoja-portaali. päivittäjän ohje

painos 3. FI. Nokia ja Nokia Connecting People ovat Nokia Oyj:n rekisteröityjä tavaramerkkejä.

1 ClipArt -kuvan käyttö Paint-ohjelmassa

WINDOWS MICROSOFT OUTLOOK 2010:N UUDET OMINAISUUDET...

SMART Notebook -tuoteperhe

HELIA 1 (1) Outi Virkki Käyttöliittymät ja ohjelmiston suunnittelu :04

OpenOffice.org Impress 3.1.0

ATK yrittäjän työvälineenä

UpdateIT 2010: Editorin käyttöohje

Word 2003:n käyttötoimintojen muutokset Word 2010:ssä

Kari J Keinonen Adobe Acrobat XI EDISTYNYT KÄYTTÖ

Usean näkymän luominen

painos 1. FI. Nokia ja Nokia Connecting People ovat Nokia Oyj:n rekisteröityjä tavaramerkkejä.

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Tekstinkäsittelyn jatko. KSAO Liiketalous 1

Valintaikkunoiden luonti ja suunnittelu

Sisällysluettelo. Johdanto Dot NET Microsoft.NET -alusta Käyttäjämallit Ohjelmien kehitys.net-alustalla...

ECDL Taulukkolaskenta

1 (14) Ohje. Ohje. GTK-wiki. Geologian tutkimuskeskus, Verkkosivustopalvelut

TAULUKKO, KAAVIO, SMARTART-KUVIOT

Wordpad ohjelman - käyttöliittymä

Tekstinkäsittely 1. Peruskäyttö. Tietotekniikan perusteet Metropolia Ammattikorkeakoulu Vesa Ollikainen

Siirtyminen Outlook versioon

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

Ryhmäkirjeen hyödyntäminen

Vesa Ollikainen, päivitys Juha Haataja

Openoffice Impress-pikakurssi

Adobe Acrobat KJK. Adobe Acrobat X EDISTYNYT KÄYTTÖ. Kari J Keinonen KJK. Kari J Keinonen 1

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

Osaamispassin luominen Google Sites palveluun

MICROSOFT PUBLISHER 2010

Muistitikun liittäminen tietokoneeseen

KUVAN TUOMINEN, MUOKKAAMINEN, KOON MUUTTAMINEN JA TALLENTAMINEN PAINTISSA

SiteAdmin.

1 Yleistä Web-editorista Web-editori -dokumentin luominen Pikatoimintopainikkeet Tallenna... 3

KYMP Webmail -palvelu

Ohjelmiston kuvakkeiden kuvaus

Video Tutorial Collection CONTENT LIST

C# 3.0:n uudet ominaisuudet Language Integrated Query...45

Microsoft. Outlook Express 6

Uutiskirjesovelluksen käyttöohje

PERUSTEET. Sisällysluettelo

Tärkeimmät toiminnot. Kertausta ja uusia toimintoja Wordistä sekä tiedostonhallinnasta. Tärkeimmät toiminnot jatkuu...

Tietotekniikan koulutus Savonlinnassa

TIETOKONEEN ASETUKSILLA PARANNAT KÄYTETTÄVYYTTÄ

Microsoft Excel KÄYTÖN PERUSTEET

Muita kuvankäsittelyohjelmia on mm. Paint Shop Pro, Photoshop Elements, Microsoft Office Picture Manager

Symbol for Windows Gold. Symboliposti. Modemo 2011 Handicom Handicom

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

ActiveX-kontrollien käyttö

1. Word 2007 käyttöliittymä

Word 2007 käyttöliittymä

Windows Maatesti. Peruskäyttö TriStar Enterprise Oy

Win7 & Office Kouluttaja: Mikko Niskanen. Materiaali: ITP / hannele.rajariemi@jyu.fi ITP / mikko.niskanen@jyu.fi ITP / timo.vorne@jyu.

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

Index. ääniopas 163 Äänioppaan painike 139

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

Väitöskirja -mallipohja

Verkkoliittymän ohje. F-Secure Online Backup Service for Consumers 2.1

Sähköposti ja uutisryhmät

Väitöskirja -mallipohja

Taulukot, taulukkoryhmät Sisällysluettelo

Kari J Keinonen Microsoft Excel 2013 KÄYTÖN PERUSTEET

Käyttöliittymän luominen

Google-dokumentit. Opetusteknologiakeskus Mediamylly

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

Ohjelmisto on tietokanta pohjainen tiedostojärjestelmä, joka sisältää virtuaalisen hakemisto rakenteen.

Siirtyminen OneNote versioon

ECDL Tietokannat. Copyright 2015 ECDL Foundation ECDL Tietokannat Sivu 1 / 7

Adobe Acrobat 9.0 Edistynyt käyttö

KUVANKÄSITTELY THE GIMP FOR WINDOWS OHJELMASSA

Siirtyminen PowerPoint versioon

EASY Tiedostopalvelin - mobiilin käyttöopas

Kirja on jaettu kahteen osaan: varsinaiseen- ja lisätieto-osioon. Varsinainen

Sivueditorin käyttöohje

Pikaopas. Ohjeiden etsiminen Hae ohjesisältöä napsauttamalla kysymysmerkkiä.

Siirtyminen Access versioon

Editorin käyttö. TaikaTapahtumat -käyttöohje

Microsoft PowerPoint KÄYTÖN PERUSTEET

Kerro kuvin 3:n uudet ominaisuudet

Sisäänrakennetun debuggerin käyttö

Vesa Ollikainen, päivitys Juha Haataja

MIKKELI atk-luokka, I krs, Otto Mannisenkatu 10

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

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

6.1 Tekstialueiden valinta eli maalaaminen (tulee tehdä ennen jokaista muokkausta ym.)

Transkriptio:

I Visual C++ 6 Ohjelmoijan käsikirja Jon Bates Tim Tompkins

II Johdanto Visual C++ 6 Ohjelmoijan käsikirja Kirjoittanut Kääntäjät Kansi Kustantaja Jon Bates & Tim Tompkins Toni Laitinen Frank Chaumont IT Press PL 25 00511 HELSINKI Sähköpostiosoite Internet palvelu@itpress.fi www.itpress.fi Painopaikka Gummerus Kirjapaino Oy, Jyväskylä 1999 Authorized translation from the English language edition published by QUE Corporation Copyright 1998 All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Finnish language edition published by IT Press Copyright 1999. Kaikki oikeudet pidätetään. Tämän julkaisun tai sen osan jäljentäminen ilman tekijän kirjallista lupaa painamalla, monistamalla, äänittämällä tai muulla tavoin on tekijänoikeuslain mukaisesti kielletty. Suomenkielisen version on julkaissut IT Press Copyright 1999. Alkuperäisen teoksen nimi on Using Visual C++ 6 ISBN 951-826-025-7

III Yleisiä näppäimistöpikavalintoja Kääntäminen ja koostaminen Pikavalinta Kuvaus F7 Build, koosta projekti Vaihto+F7 Compile, käännä tiedosto F4 Seuraava virhe F5 Aja debuggerissa Vaihto+F5 Aja ohjelma Teksti-editori Pikavalinta Ctrl+F F3 Ctrl+F3 Ctrl+A Ctrl+C Ctrl+N Ctrl+O Ctrl+S Ctrl+V Ctrl+W Ctrl+X Ctrl+Y Ctrl+Z Resurssit Pikavalinta Ctrl+D Ctrl+T Debuggaus Pikavalinta F9 F10 F11 sisältä Ctrl+B Kuvaus Etsi Etsi seuraava Etsi edellinen Valitse kaikki Kopioi leikepöydälle Luo uusi tiedosto tai projekti Avaa tiedosto Tallenna Liitä leikepöydältä ClassWizard Leikkaa leikepöydälle Toista Peru Kuvaus Näytä valintaikkunan sarkainjärjestys Testaa valintaikkunan kontrollit Kuvaus Keskeytyskohdan asettaminen/poistaminen Step over, rivin askellus menemättä funktioon Step into, rivin askellus jatkaen function Muokkaa keskeytyskohtia

IV Unkarilainen notaatio Windows-ohjelmoijat käyttävät usein muuttujia nimettäessä unkarilaista nimeämistapaa (HN). Näin on tehty myös kirjan esimerkeissä ja Visual C++:n esimerkkiohjelmissa. Muuttujat varustetaan tällöin tyyppiä kuvaavalla etuliitteellä seuraavan taulukon mukaisesti. Tyyppi Etuliite Esimerkki int n nage char ch chinitial float fl flangle double d dsalary unsigned u uid long l lhours BOOL b bdone WORD w wsize DWORD dw dwerror osoitin p pbutton C++-jäsenmuuttuja m_ m_nage globaali muuttuja g_ g_hwnd merkkijono sz szname lippu f fchecked leveys cx cxcaption korkeus cy cyclient suorakulmio rc rcclient ikkuna wnd wndmain kahva h hinstance piste pt ptmouse luetteloruutu lb lbnames

V Johdanto... 1 Mikä on Visual C++ 6.0 ja mitä hyötyä siitä on?... 1 Mitä uutta tässä kirjassa on?... 1 Onko tämä kirja tarkoitettu sinulle?... 2 Kirjassa käytetyt merkinnät... 3 Lähdetekstit... 3 Visual C++ -ohjelman tekeminen ja suunnittelu... 5 Visual C++:n käynnistäminen... 6 Uuden projektin luominen... 7 Projektin tyypin valitseminen... 7 Projektien nimeäminen ja hakemiston valitseminen... 7 AppWizardin käyttäminen... 8 AppWizardin perusvalinnat... 8 Sovelluksen koostaminen ja suorittaminen... 10 Koostamisasetusten valinta... 10 Kääntäminen ja linkittäminen... 10 Sovelluksen suorittaminen... 11 Windows-käyttöliittymä... 12 Sovelluksen ulkoasun muuttaminen... 12 Painikekontrollin lisääminen... 13 Minute-valintaikkunan mallin avaaminen... 13 Painikkeen lisääminen Minute-sovelluksen ikkunaan... 14 Ohjelmakoodin liittäminen käyttöliittymään... 17 Ohjelmakoodin liittäminen painikkeeseen... 17 Muuttuneen ohjelman kokeileminen... 20 Projektin tallentaminen ja sulkeminen... 21

VI Kehitysympäristö... 23 Työskentely Developer Studiossa... 24 Vanhan projektin avaaminen... 24 Työtilaikkuna... 26 ClassViewin käyttö... 26 ResourceView... 33 Valintaikkunan painikkeiden toiminnan muuttaminen... 37 FileView... 39 Projektien hallinta... 40 Projektin asetukset... 40 Muita käännöskonfiguraatioita... 41 Valintaikkunoiden luonti ja suunnittelu... 43 Valintaikkunapohjan luominen... 44 Uuden valintaikkunapohjaisen sovellusprojektin luominen...44 Sovelluksen pääikkunan muokkaaminen... 47 Uuden valintaikkunan tekeminen... 48 Valintaikkunan ID-tunnuksen asettaminen... 48 Uuden valintaikkunan tunnuksen muuttaminen... 48 Valintaikkunan yleiset ominaisuudet... 49 Valintaikkunan tyylit... 50 Kontrollien lisääminen ja sijoittaminen... 50 Dialog-työkalurivin näyttäminen... 53 Controls-työkalurivin näyttäminen... 53 Valintaikkunan suurentaminen... 53 Kontrollien lisääminen valintaikkunaan... 54 Kontrollien koon muuttaminen... 56 Kontrollin koon muuttaminen sen sisällön mukaan... 56 Tekstiruudun koon muuttaminen... 56 Usean kontrollin valitseminen... 57 Toisen tekstiruudun muokkaaminen... 57 Kontrollien tasaaminen... 57 Tekstiruutujen tasaaminen... 58 Apuviivojen käyttö... 59 Valintaikkunan kontrollien järjestäminen... 59 Ryhmäkehysten käyttö... 59 Ryhmäkehyksen ja valintaruutujen lisääminen ikkunaan... 59 Sarkainjärjestyksen asettaminen... 61 Sarkainjärjestyksen määrittäminen valintaikkunalle... 61 Näppäimistöpikavalintojen asettaminen... 62

VII Painikkeet... 63 Tavallisten painikkeiden käyttö... 64 Painikkeiden lisääminen Buttons-valintaikkunaan... 64 Käsittelijöiden lisääminen painikkeiden napautukselle... 66 Painikkeen napautuksen käsittelijäfunktion lisääminen... 66 Sanomakartat... 67 Painikkeiden muokkaaminen ohjelmansuorituksen aikana 69 Jäsenmuuttujien ja funktioiden lisääminen ClassViewin avulla 72 Valintapainikkeet... 74 Valintapainikeryhmän lisääminen... 75 Valintapainikkeiden lisääminen CityBreak-valintaikkunaan..75 Mikä valintapainikkeista on valittuna?... 77 Muuttujien liittäminen valintapainikkeisiin ClassWizardilla... 77 Valintaruudut... 80 Valintaruutujen lisääminen... 80 Valintaruutujen lisääminen CityBreak-valintaikkunaan... 81 Valintaruutujen lukeminen ja asettaminen... 81 Tekstikontrollit... 85 Tekstikontrollit... 86 Tekstin muotoilu valintaikkunoissa... 86 Tekstikontrollin ja tekstiruutujen yhdistäminen... 87 Tekstikontrollien muokkaaminen ohjelmassa... 87 Tekstikontrollien lisääminen valintaikkunaan... 88 Muuttujien lisääminen tekstikontrolleihin ClassWizardilla... 89 Tekstiruudut... 92 Tekstiruutujen lisääminen... 93 Tekstiruutujen lisääminen valintaikkunaan... 93 Tekstiruudun lukeminen ja siihen kirjoittaminen... 94 CString-muuttujan liittäminen tekstiruutuun ClassWizardilla. 94 Muokkaustietosanomien huomioiminen... 96 Sanomankäsittelijän luominen ClassWizardilla... 97 Tekstiruutukontrollin aliluokat... 99 Ylimääräisten tekstiruutujen lisääminen Edits-valintaikkunaan 100 Uuden aliluokan tekeminen ClassWizardilla... 101 Aliluokan sanomankäsittelijäfunktion luominen ClassWizardilla 102 Moniriviset tekstiruudut... 104

VIII Luettelokontrollit... 107 Luettelokontrollien luominen... 108 Yhdistelmäruutujen lisääminen... 108 Yhdistelmäruudun lisääminen Lists-valintaikkunaan... 109 CComboBox-muuttujan liittäminen yhdistelmäruutuun ClassWizardilla... 110 Puukontrollien lisääminen... 111 Puukontrollin lisääminen Lists-valintaikkunaan... 111 CTreeCtrl-muuttujan lisääminen puukontrolliin ClassWizardilla 112 Luetteloruutujen lisääminen... 112 Luetteloruudun lisääminen Lists-valintaikkunaan... 113 CListBox-muuttujan lisääminen luetteloruutuun ClassWizardilla... 114 Luettelokontrollin lisääminen... 114 Luettelokontrollin lisääminen Lists-valintaikkunaan... 115 CListCtrl-muuttujan lisääminen luettelokontrolliin ClassWizardilla... 116 Alkioiden lisääminen eri luettelokontrolleihin... 117 Yhdistelmäruudun täyttäminen... 117 Yhdistelmäruudun ilmoitussanomiin vastaaminen... 120 Puukontrollin täyttäminen... 121 Luetteloruudun täyttäminen... 123 Luetteloruudun ilmoitussanomiin vastaaminen... 125 Luettelokontrollin täyttäminen... 127 Edistymis-, vieritys- ja liukupalkit sekä päiväys/aika -kontrollit... 131 Lukualuekontrollit... 132 Edistymispalkki... 132 Edistymispalkin lisääminen valintaikkunaan... 133 Muuttujan liittäminen edistymispalkkiin... 134 Jäsenmuuttujan liittäminen edistymispalkkiin... 134 Edistymispalkin muokkaaminen ja päivittäminen... 135 Edistymispalkin lukualueen määrittäminen... 135 Edistymispalkin aseman asettaminen... 136 Askelarvon asettaminen ja käyttö... 136 Vierityspalkkien käyttö... 137 Vierityspalkin lisääminen valintaikkunaan... 137 Muuttujan liittäminen vierityspalkkiin... 138

IX Vierityspalkin alustaminen... 139 Vierityspalkin ilmoitussanomien käsittely... 141 Liukukontrollin käyttö... 144 Liukukontrollin lisääminen valintaikkunaan... 145 Muuttujan liittäminen liukukontrolliin... 146 Liukukontrollin alustaminen... 146 Liukukontrollin ilmoitussanomiin vastaaminen... 147 Päiväys/Aika-kontrollin käyttö... 148 Päiväys/aika-kontrollin lisääminen valintaikkunaan... 149 Muuttujan liittäminen päiväys/aika-kontrolliin... 151 Päiväys/aika-kontrollin alustaminen... 152 Päiväys/aika-kontrollin ilmoitussanomiin vastaaminen... 155 Ajan muuttamisen ilmoitussanoman käsittelijän lisääminen 155 Kuukausikalenterikontrolli... 157 Kuukausikalenterin lisääminen valintaikkunaan... 157 Muuttujan liittäminen kuukausikalenteriin... 158 Kuukausikalenterin alustaminen... 159 Päiväyksen valinta kuukausikalenterista... 160 Päiväyksen valinnan ilmoitussanomiin vastaaminen... 161 Hiirisanomiin vastaaminen... 163 Hiiren painikesanomien käsittely... 164 Painalluksen ja vapautuksen käsittely... 164 Hiiripainikkeen sanomankäsittelijän lisääminen... 164 Kaksoisnapautus... 169 Hiiren liikkeen ja paikan seuranta... 169 Mouse Move tapahtuman käsittely... 170 Jäsenmuuttujan lisääminen valintaikkunaluokkaan... 171 Hiirisyötteen kaappaaminen... 173 Osumatestauksen asettaminen... 174 CRectTracker-luokan käyttö... 176 ActiveX-kontrollien käyttö... 181 ActiveX-kontrollien valitseminen ja lisääminen sovellukseen komponenttigalleriasta... 182 ActiveX-kontrollien selaaminen... 182 ActiveX-kontrollien selaaminen komponenttigalleriasta... 183 Uusien kontrollien lisääminen projektiisi... 184

X ActiveX-kontrollien valitseminen, muokkaaminen ja testaaminen Control-palkista... 186 ActiveX-kontrollin lisääminen valintaikkunaan... 186 ActiveX-kontrollien lisääminen valintaikkunaeditorista... 187 Kontrollien testaaminen valintaikkunaeditorista... 187 Kontrollin ominaisuuksien muuttaminen resurssieditorissa... 188 Vakio-ominaisuuksien asettaminen... 188 Kontrollin ominaisuussivujen käyttö... 188 Kontrolliluokkien käyttö... 190 Kontrollin kutsuluokan jäsenmuuttujan lisääminen... 190 Kontrollin ominaisuuksien lukeminen ja asettaminen... 191 Virtuaalifunktion lisääminen valintaikkunaluokkaan... 192 ActiveX-tapahtumankäsittelijöiden toteuttaminen ClassWizardilla... 193 ActiveX-tapahtumankäsittelijä lisääminen ClassWizardilla. 194 Valintaikkunoiden käyttö... 197 Valintaikkunaluokan luominen... 198 Uuden valintaikkunaresurssin lisääminen... 199 Uuden valintaikkunaresurssin lisääminen... 199 Luokan johtaminen CDialogista ClassWizardilla... 200 Uuden valintaikkunan käsittelevän luokan luominen ClassWizardilla... 200 Uuden valintaikkunaluokan alustaminen... 202 Modaalin valintaikkunan esittäminen... 203 Jäsenmuuttujien lisääminen valintaikkunan tietojen tallettamiseksi... 204 Valintaikkunan tiedonvälitys ja varmennus... 206 Data Exchange (DDX) funktioiden käyttö... 207 Data Validation (DDV)-funktioiden käyttö... 209 Omien tarkistusfunktioiden tekeminen... 211 Modaalittomien valintaikkunoiden käyttö... 212 Modaalittomien valintaikkunoiden luominen ja tuhoaminen 213 Tiedon lukeminen ja kirjoittaminen modaalittomasta valintaikkunasta... 216 Modaalittoman valintaikkunan sulkemissanoman käsittely 220 Sulkemispainikkeen poistaminen... 221

XI Kuvien, bittikarttojen ja kuvakkeiden käsittely... 223 Kuvaeditorin käyttö... 224 Graphics- ja Colors-työkalupalkkien valinta... 225 Kuvakeresurssien luominen ja muokkaaminen... 226 MFC-oletuskuvakkeen muokkaaminen... 226 MFC-oletuskuvakkeen muokkaaminen... 227 Uuden kuvakeresurssin lisääminen... 227 Uuden kuvakeresurssin luominen... 227 Uuden bittikarttaresurssin lisääminen... 229 Uuden bittikarttaresurssin luominen... 229 Bittikartan koon ja värien säätäminen... 230 Bittikartan ominaisuuksien muokkaaminen... 230 Kuvien tuominen... 231 Resurssin tuominen tiedostosta... 231 Resurssin tuominen suoritettavasta tiedostosta... 232 Kuvien käyttö valintaikkunoissa... 232 Kuvakontrollin ominaisuudet... 233 Kuvaresurssien lataaminen ohjelmaa ajettaessa... 234 Kuvakontrollin lisääminen valintaikkunaan... 235 Muuttujan liittäminen kuvakontrolliin... 236 Bittikarttapainikkeiden luominen... 238 Bittikarttojen tekeminen painikkeiden tiloja varten... 239 Bittikarttapainikkeen kuvien luominen... 239 Bittikarttapainikeluokan käyttö... 241 Kuvien käyttö kontrolleissa... 242 Kuvaluettelot... 242 Kuvaluettelon luominen ja käyttö... 244 Dokumentit, näkymät ja kehykset 249 SDI-sovelluksen luominen... 250 SDI-sovelluksen luominen AppWizardilla... 251 SDI-sovelluksen luokat... 254 SDI-sovelluksen näkyvät osat... 256 SDI-dokumenttimallit... 258 Dokumentti/näkymä-sovellusrungon funktioiden käyttö. 260 CSingleDocTemplate::OpenDocumentFile... 262 CDocument::OnNewDocument... 263

XII CDocument::OnOpenDocument... 263 CDocument::OnSaveDocument... 264 CDocument::DeleteContents... 264 CDocument::OnCloseDocument... 264 Dokumenttien ja näkymien yhteiskäyttö... 264 Dokumentin tietojen alustaminen... 265 Jäsenmuuttujien lisääminen dokumenttiin... 266 Dokumentin tiedon tallennuksen sekä saantimetodien toteutus 266 Dokumentin tietojen hakeminen näkymästä... 267 SDICoinView.cpp... 268 SDICoinView.h... 268 Vakiomallin resurssien käyttö... 269 Valikon komentojen lisääminen... 270 Näkymän päivittäminen... 272 Valikoiden käyttö... 275 Valikkoresurssien luominen ja muokkaaminen... 276 Uusien valikkoresurssien lisääminen... 276 Uuden valikkoresurssin lisääminen... 276 Valikoiden nimien lisääminen... 277 Uuden valikon nimen lisääminen... 277 Valikon alkioiden lisääminen... 278 Uuden valikon alkion lisääminen... 278 Komentojen ID-tunnusten asettaminen... 279 Valikon komennon ominaisuuksien muuttaminen... 280 Erotinviivojen lisääminen... 280 Alivalikoiden luominen... 281 Valintamerkkien lisääminen... 281 Pikanäppäinten asettaminen... 282 Valikon komentojen käsittely... 282 Valikon komennon käsittelijäfunktion lisääminen... 283 Valikon komennon käsittelijäfunktion lisääminen ClassWizardilla... 283 Komentokäyttöliittymän käsittelijäfunktion lisääminen... 285 Valikon komentojen salliminen ja poistaminen... 285 Valintamerkkien asettaminen ja poistaminen... 286 Valikon tekstin muuttaminen ajon aikana... 287 Pikavalikoiden lisääminen... 287 Pikavalikon käynnistäminen... 288 Pikavalikon käsittelijäfunktion lisääminen... 288

XIII Pikavalikon komentojen käsitteleminen... 291 Valikko-olioiden luominen ja käsitteleminen... 292 CMenu-olion alustaminen... 292 Valikon alkioiden lisääminen ajon aikana... 293 Valikon alkioiden muokkaaminen ajon aikana... 296 Valikon alkioiden poistaminen dynaamisesti... 297 Työkalu- ja tilarivit... 299 Vakiotyökalurivien muokkaaminen... 300 Vakiotyökalurivi... 301 Vakiotyökalurivin luominen... 301 Vakiotyökalurivin kiinnittäminen... 303 Työkalurivin painikkeiden lisääminen resurssieditorilla... 305 Työkalurivin painikkeen lisääminen... 306 Painikkeiden siirtäminen ja poistaminen sekä erotinviivojen lisääminen... 307 Työkalurivin painikkeiden käytön salliminen ja estäminen 308 Oman työkalurivin lisääminen... 308 Uuden työkaluresurssin lisääminen... 308 Uuden työkaluresurssin lisääminen... 308 Työkalurivin lisääminen kehysikkunaan... 309 Työkalurivin piilottaminen ja näyttäminen... 310 Työkalurivin paikan tallentaminen ja lataaminen... 311 Valintarivien käyttö... 312 Valintariviresurssin lisääminen... 313 Valintarivin lisääminen kehysikkunaan... 314 Valintarivin kontrollien käsitteleminen... 315 Tilarivin räätälöinti... 318 Vakiotilarivi... 318 Ilmaisimien ja erottimien lisääminen... 321 Uuden merkkijonoresurssin lisääminen merkkijonotaulukkoon 322 Ilmaisinruudun koon, tyylin ja tekstin muuttaminen ajon aikana... 324 Internet Explorerin tyyliset skaalattavat palkit... 328 AppWizard-sovellusrungon Rebar-palkin käyttö... 329 Rebar-palkin otsikon ja taustakuvan asettaminen... 330

XIV Piirtopinnalle piirtäminen... 333 Piirtopinta... 334 Erilaiset piirtopinnat... 334 CDC-luokan käyttö... 335 Piirtopintaan tarttuvan valintaikkunasovelluksen luominen 335 Painikkeen luominen... 336 BN_CLICKED-käsittelijän lisääminen ClassWizardilla... 336 WM_DESTROY-sanoman käsittelijän lisääminen... 338 Ikkunan työalue piirtopintana... 340 Paint-piirtopinnan käyttö... 341 Muistipiirtopintojen käyttö... 345 Koordinaatiston kohdistustapojen käyttö... 348 Näkymän OnDraw()-funktion hakeminen ja muokkaaminen 349 Vapaasti skaalattavat kohdistustavat... 351 Piirtopinnan ominaisuuksien lukeminen... 352 Luetteloruutukontrollin lisääminen About-ikkunaan... 354 Muuttujan liittäminen luetteloruutukontrolliin ClassWizardilla 355 OnInitDialog()-käsittelijäfunktion lisääminen... 356 Kynien ja siveltimien käyttö... 359 Kynien luominen... 360 CPen-luokan käyttö... 360 Kynätyypin valitseminen... 360 Kynän leveyden muuttaminen... 360 Kynän värin muuttaminen... 361 Varastokynien käyttö... 362 Kynien valitseminen piirtopinnalle... 362 Kynien tuhoaminen... 364 Viivojen ja muotojen piirtäminen kynillä... 365 Piirtopinnan luominen piirtämistä varten... 365 Piirtopinnan luominen SDI-sovellukseen... 365 Kynän siirtäminen... 366 Viivan piirtäminen... 367 Piirtäminen pistekoordinaatein... 369 Ympyröiden ja ellipsien piirtäminen... 371 Kaarien piirtäminen... 373 Monikulmioiden piirtäminen... 375 Siveltimien luominen... 375 CBrush-luokan käyttö... 375

XV Väritettyjen ja kuvioitujen siveltimien luominen... 376 Ikkunan taustan värittäminen... 376 Ikkunan taustavärin muuttaminen lisäämällä ikkunan taustan pyyhkimisen käsittelijäfunktio... 376 Siveltimien luominen kuvioista ja kuvista... 378 Siveltimessä käytettävän kuvan luominen... 378 Varastosiveltimien käyttö... 380 Siveltimien valitseminen piirtopinnalle... 381 Siveltimien tuhoaminen... 382 Täytettyjen kuvioiden piirtäminen siveltimillä... 382 Suorakulmioiden ja pyöristettyjen suorakulmioiden piirtäminen... 383 Täytettyjen ellipsien ja ympyröiden piirtäminen... 384 Puoliellipsien piirtäminen... 384 Täytettyjen monikulmioiden piirtäminen... 386 Fonttien käyttö... 389 Tekstinpiirtofunktiot... 390 Yksinkertainen tekstitulostus... 390 Tekstin tasauksen asettaminen... 391 Merkin ja taustan värin muuttaminen... 393 Läpinäkyvän ja näkymättömän tekstin piirtäminen... 394 Tekstin rajaaminen suorakulmioon... 395 Erilaisten fonttien luominen... 397 CFont-luokan käyttö... 397 Fonttien luominen CreatePointFont()-funktiolla... 397 Fonttien luominen CreateFont()-funktiolla... 398 Fontin korkeuden ja leveyden asettaminen... 399 Fontin kallistuksen ja suunnan asettaminen... 399 Lihavointi, kursivointi, alle- ja yliviivaus... 399 Fontin laadun ja tarkkuuden asettaminen... 400 Määrätyn fontin nimen asettaminen... 402 Fontin luominen CreateFont()-funktiolla... 402 Fonttien valitseminen... 404 Fonttien läpikäynti... 404 Fontinvalintaikkunan käyttö... 408 Muotoillun ja monirivisen tekstin lisääminen... 411 Fonttien tuhoaminen... 414

XVI Näkymien vierittäminen ja koon muuttaminen... 415 Ikkunan koon muuttumisen käsitteleminen... 416 FormView-pohjaisen SDI-sovelluksen luominen... 416 Koon muutostapahtuman käsitteleminen... 417 WM_SIZING-käsittelijän lisääminen EventWizardilla... 418 Lopullisen koon muuttamissanoman käsitteleminen... 420 Näkymän käsittelijän lisääminen ikkunan koon muuttumiselle 420 Monirivisen vieritettävän tekstikontrollin lisääminen vanhaan FormView-projektiisi... 422 Muuttujan liittäminen tekstikontrolliin ClassWizardilla... 423 Jäsen/käsittelijäfunktion hakeminen ClassWizardilla... 424 Kokorajojen asettaminen... 426 Käsittelijäfunktion lisääminen ikkunan vähimmäis- ja enimmäiskoon ohjaamiseksi... 426 Venytettävien valintaikkunoiden luominen... 427 About-ikkunan muuttaminen pienennettäväksi ja suurennettavaksi... 428 Ikkunoiden vierittäminen... 428 Vieritettävän alueen koon asettaminen... 429 Näkymän OnInitialUpdate()-funktion löytäminen vieritysnäkymän koon muuttamista varten... 429 Sivu- ja rivivierityksen määrän muuttaminen... 431 Vieritysaseman käyttäminen... 432 Vierityssanomien käsitteleminen... 434 OnScroll()-korvaajafunktion lisääminen... 434 OnHScroll()-käsittelijän lisääminen WM_HSCROLL-sanomalle 436 Luettelo-, puu-, parannetun tekstiruutu- sekä HTML-näkymän käyttö 439 Mitä ovat List, Tree ja Rich Edit -näkymät... 440 List View näkymän luominen ja käyttö... 440 List View sovelluksen luominen AppWizardilla... 440 List View näkymään perustuvan SDI-sovellusrungon luominen 440 Alkioiden lisääminen... 441 Jäsenmuuttujan lisääminen ClassView-sivulta... 441

XVII Jäsenfunktion lisääminen ClassView-sivulla... 442 Luettelon tyylin muuttaminen... 445 Sarakkeiden ja sarakeotsikoiden lisääminen... 447 Valitun luettelon lukeminen... 451 Ilmoitussanoman käsittelijän lisääminen... 452 Puunäkymien luominen ja käyttö... 454 Tree view sovelluksen luominen AppWizardilla... 455 Puunäkymän tyylien muuttaminen... 455 Alkioiden lisääminen... 456 Valitun solmun hakeminen... 459 Näkymässä muokkaamisen käsittely... 461 Rich Edit näkymien luominen ja käyttö... 463 Rich Edit näkymien luominen... 463 Näkymän tekstin lataaminen ja tallentaminen... 464 Kappaleen muotoileminen... 464 OLE-objektien lisääminen... 467 HTML-selainnäkymän luominen ja käyttö... 468 HTML view näkymän luominen... 468 URL-osoitteen asettaminen... 468 Selaimen tapahtumien käsittely... 469 Usean näkymän luominen... 471 Usean näkymän ymmärtäminen... 472 Ikkunoiden jakaminen... 472 Dynaamisten jakoikkunoiden luominen... 473 SplitterBar-komponentin lisääminen... 474 Dynaamisten jakoikkunoiden alustaminen... 475 Staattisten jakoikkunoiden luominen... 478 Staattisten jakoikkunoiden alustaminen... 478 Oman näkymäluokan johtaminen ClassWizardilla... 478 Staattisen jakoikkunan toteutus... 479 Resurssienhallinnan näköisten sovelluksien luominen... 482 Resurssienhallinnan näköisen projektin luominen... 482 Näkymien lisääminen sovellukseen ajon aikana... 483 Näkymien lisääminen ja poistaminen... 483 Näkymän luomisen ja aktivoinnin ohjaaminen... 484 Valikon komentojen käsittelijöiden lisääminen... 484 Apufunktion luominen... 485

XVIII MDI-sovellusten kehittäminen... 491 MDI-sovelluksen luominen... 492 MDI-sovelluksen luominen AppWizardilla... 493 MDI-sovelluksen luokat... 495 MDI-sovelluksen näkyvät osat... 497 MDI-dokumenttimallit... 500 Dokumentin, näkymän ja MDI-kehyksen luomisen vaiheet 502 Siirtyminen dokumentti/näkymä-olioiden välillä... 504 MDI-esimerkkisovelluksen kehittäminen... 506 Jäsenmuuttujien lisääminen dokumenttiin... 507 Dokumentin tietojen varastoinnin ja saantimetodin toteutus 507 Dokumentin tietojen hakeminen näkymästä... 508 Dokumentin tietojen muuttaminen ja näkymän päivittäminen 509 Valikon komentojen lisääminen... 509 Uusien dokumenttimallien lisääminen... 512 Uuden dokumentti- ja näkymäluokan luominen... 512 Dokumenttivalikon luominen... 514 Dokumenttimerkkijonon luominen... 515 Tulostaminen ja esikatselu... 521 Sovellusrungon toimintojen käyttö... 522 Oletustulostuksen käyttö... 522 OnPrint()-funktion korvaaminen... 525 OnPrint()-virtuaalifunktion korvaaminen... 526 Tulostinpiirtopinnan käyttö... 528 Sivusuhteen säilyttäminen... 530 Sivutus ja paperin suunta... 532 Ensimmäisen ja viimeisen tulostettavan sivun asettaminen 532 Print-valintaikkunan käyttö... 536 Pysty- ja vaakasuuntainen tulostus... 539 GDI-objektien lisääminen OnBeginPrinting()-funktiolla... 539 Piirtopinnan valmistelun räätälöinti... 541 Tulostuksen keskeyttäminen... 541 Tulostaminen suoraan ilman sovellusrunkoa... 542 Print-valintaikkunan kutsuminen suoraan... 542 StartDoc()- ja EndDoc() -funktioiden käyttö... 544 StartPage() ja EndPage() -funktioiden käyttö... 545

XIX Datan tallentaminen, lataaminen ja siirtäminen... 547 Serialisoinnin käyttö... 548 Tiedostoja käsittelevän SDI-sovellusrungon luominen... 548 Serialisoitavien dataolioiden luominen... 549 Serialisoitavan luokan määrittely... 551 Uuden header-tiedoston luominen luokan määrittelylle... 551 Serialisoitavan luokan toteutus... 552 Uuden.cpp-tiedoston luominen luokan toteuttamiseen... 553 Dokumentin tietojen säilyttäminen ajon aikana... 555 Dataolioiden serialisointi... 558 Viimeksi avattujen tiedostojen luettelon käyttö... 561 Dokumenttityyppien rekisteröiminen... 561 Tiedostojen käsittely... 561 CFile-luokan käyttö... 562 Tiedostojen avaaminen... 562 Tiedoston lukeminen ja kirjoittaminen... 564 Tiedosto-osoittimen muokkaaminen... 567 Tiedostotietojen löytäminen... 568 Tiedostojen nimeäminen uudelleen ja poistaminen... 570 Muita CFile-luokasta johdettuja luokkia... 571 Tiedon siirtäminen leikepöydän kautta... 572 Leikepöydän tietoformaattien asettaminen... 572 Tiedon kopiointi leikepöydälle... 573 Tiedon liittäminen leikepöydältä... 576 Tietokantojen ja tietuenäkymien käyttö... 579 Tietokantojen käyttö... 580 Relaatiotietokantojen käyttö... 580 ODBC:n käyttö... 581 Tietolähteen määrittäminen... 582 ODBC-tietolähteen luominen ja määrittäminen... 582 Tietokantaa tukevan sovelluksen luominen... 585 Tietokantatuen lisääminen AppWizardilla... 585 Tietolähteeseen kytkeytyminen AppWizardilla... 586 Tietokantaan kytkeytyminen... 587 Tietokannan arvojen kyseleminen... 588

XX Tietokannan arvojen päivittäminen... 591 Kenttien sitominen tietokannan tauluihin... 592 Record View näkymän luominen ja käyttö... 593 Record View valintaikkunapohjan muokkaaminen... 593 Record view näkymän suunnitteleminen valintaikkunapohjalle... 593 Tekstiruutujen liittäminen tietuejoukon kenttiin... 595 Kontrollien liittäminen tietuejoukon kenttiin ClassWizardilla 595 OLE- ja COM-ohjelmoinnin ymmärtäminen... 599 Komponenttipohjainen ohjelmointi... 600 COM-liittymät... 601 Liittymän ja luokan ID-tunnukset sekä GUID-tunnukset.. 603 COM-objektien ilmentymien luominen... 605 Proxy-DLL:t ja parametrien hallinta... 607 Liittymien versiointi... 607 OLE-automaatio... 608 Dispatch-liittymä... 608 VARIANT-tyyppisten arvojen käyttö... 609 Automaatiopalvelimen luominen... 611 Automaatiopalvelimen metodin lisääminen ClassWizardilla 615 Automaatioasiakasohjelman luominen... 617 Dispatch ohjainluokan lisääminen tyyppikirjastosta ClassWizardilla... 617 OLE-säilöt, -palvelimet ja minipalvelimet... 621 ActiveX-kontrollien luominen... 623 ActiveX-sovellusrungon luominen ActiveX Control Wizardilla... 624 Kontrollien lukumäärän, lisensoinnin ja ohjeen määrittäminen... 624 Luokkien nimien ja käyttöasetusten määrittäminen... 625 Olemassa olevien kontrollien aliluokittaminen toimintojen lisäämiseksi... 627 Edistyneiden ActiveX ominaisuuksien käyttö... 627 Kontrollin toteutus... 628 Kontrollin piirtäminen... 628

XXI Käyttäjätapahtumien ja syötteen käsittely... 631 Kontrollin osittainen pikatestaus... 632 Tapahtuman laukaisemisen toteutus... 634 ActiveX-kontrollitapahtuman lisääminen ClassWizardilla... 634 Ominaisuusliittymän luominen... 636 Varasto-ominaisuuksien toteutus... 637 ActiveX-kontrollin varasto-ominaisuuden lisääminen ClassWizardilla... 637 Varastoväri-ominaisuussivun lisääminen... 638 Omien ominaisuuksien lisääminen... 639 Ominaisuussivukontrollien lisääminen omille ominaisuuksille... 642 Oman ominaisuuden liittäminen kontrolliin ClassWizardilla 643 Ominaisuuksien tekeminen pysyviksi... 645 Kontrollin kääntäminen ja rekisteröiminen... 647 Lähdetiedostot... 647 Tyyppikirjaston ja lisenssitiedostojen luominen... 648 Kontrollin rekisteröiminen... 648 Testaaminen ActiveX Control Test Container ohjelmalla 649 Kontrollin valitseminen ja lisääminen... 649 Kontrollin ominaisuuksien testaaminen... 649 Ambient-ominaisuuksien testaaminen... 650 Laukaistujen tapahtumien kirjaaminen... 651 Sisäänrakennetun debuggerin käyttö... 653 Debuggaus- ja selaustietojen luominen... 654 Debug- ja Release tilan käyttö... 654 Debuggausvalintojen ja -tasojen asettaminen... 655 Selaustietojen luominen ja käyttö... 658 Etädebuggaus ja ajonaikainen debuggaus... 661 Ohjelmansuorituksen seuranta ja yksittäisaskellus.. 662 TRACE-makron käyttö... 662 ASSERT- ja VERIFY-makrojen käyttö... 665 Keskeytyskohtien ja ohjelman yksittäisaskelluksen käyttö 667 Edit and Continue toiminnan käyttö... 670 Ohjelman muuttujien seuraaminen... 670

XXII Muita debuggerin ikkunoita... 672 Muita debuggaustyökaluja... 673 Spy++... 673 Process Viewer... 676 OLE/COM Object Viewer... 676 MFC Tracer... 677 Työskentely API:en ja SDK:ien kanssa... 679 Mitä ovat API:t ja SDK:t... 680 Nopean äänen ja näytön toteuttaminen DirectX:llä... 680 DirectSoundin käyttö... 681 DirectDraw:n käyttö... 689 Direct3D:n käyttö... 697 DirectPlayn käyttö... 698 DirectInputin käyttö... 698 DirectMusic... 698 DirectSetupin käyttö... 698 Viestien ja sähköpostin luominen MAPIlla... 698 Yksinkertaisen MAPIn käyttö... 699 MAPIn Send Mail toiminnon lisääminen AppWizardilla.. 701 Video- ja äänimultimedia- kirjastojen käyttö... 705 MCI-rajapinnan käyttö... 705 MCI-ilmoitussanomat... 709 MCI-ikkunan lisääminen... 712 Sanasto englanti-suomi... 717 Sanasto suomi-englanti... 732 Hakemisto... 747

XXIII Kirjoittajat Jon Bates on työskennellyt kaupallisissa, teollisissa ja sotilaallisissa ohjelmistonkehitystehtävissä ympäri maailmaa 15 vuoden ajan. Tällä hetkellä hän toimii itsenäisenä ohjelmistokonsulttina ja -kehittäjänä ja on erikoistunut Windows NT/95/98-ympäristöön kehitettäviin Visual C++:lla tehtäviin sovelluksiin. Jonathan aloitti uransa pelien kirjoittamisella suosittuihin tietokoneympäristöihin ja hän on työskennellyt sen jälkeen useiden käyttöjärjestelmien, kuten CPM, DOS, TRIPOS, Unix ja Windows, ja ohjelmointikielten, kuten Assembly-, 3G- ja oliokielten, kanssa. Hän on tehnyt järjestelmä- ja sovellusohjelmistoja, esimerkiksi laiteohjaimia, sähköposti- mallinnus-, video-, kuvankäsittely- verkko-, tietoliikenne-, tiedonkeräys-, ohjausjärjestelmä- ja visualisointiohjelmistoja. Hän on myös kirjoittanut artikkeleita eri aiheista alan julkaisuihin. Jonathan asuu vaimonsa Ruthin ja koiransa Chaosin kanssa keskellä Englantia. tietokoneiden lisäksi hänen mielenkiintonsa kohdistuu fraktaaleihin. Jonathan on tavoitettavissa sähköpostilla soitteesta jon@chaos1.demon.co.uk ja hänen kotisivunsa on osoitteessa www.chaos1.demon.co.uk. Tim Tompkins on tällä hetkellä johdon tietojärjestelmiin erikoistuneen eurooppalaisen ohjelmistotalon ohjelmistonkehitysjohtaja. Hän on vastuussa yrityksen Visual C++:lla tehdyistä kaupallisista sovelluksista. Timin ohjelmointiura alkoi vuonna 1986 COBOLilla IBM:n suurkoneisiin tehtävällä tilasto-ohjelmistolla. Sen jälkeen hänellä on kahdeksan vuoden kokemus C:stä ja Visual C++:sta. Hän on työskennellyt useiden käyttöjärjestelmien, kuten CPM, DOS, UNIX, XENIX, Windows NT/95/98, kanssa. Hän on suunnitellut ja kirjoittanut ohjelmistoa tuotannon ohjaukseen, tiedonkeruuseen, varastonhallintaan sekä kulu- ja aikatauluseurantaan ja - arviointiin. Tim asuu myös Englannissa vaimonsa Traceyn ja Oliver-hevosensa kanssa. Hänen harrastuksiinsa kuuluvat tietokoneiden lisäksi urheiluautot. Timin tavoittaa sähköpostilla osoitteesta tinytim@globalnet.co.uk.

XXIV Omistettu Tämä kirja on omistettu ohjelmista suurimmalle ja hienoimmalle, DNA:lle. Kiitokset Erityiskiitokset Matt Purcellille ja Kelly Marshallille tuesta ja yksityiskohtien huomioimisesta, mikä auttoi tiukasta aikataulusta selviämisessä. Kiitos myös Matt Butlerille, Tonya Simpsonille, Kate Givensille ja Kate Talbotille sekä muille MCP-kustamon väelle kirjan muokkausvaiheessa. Kiitos kuuluu myös perheillemme ja ystävillemme, jotka tarjosivat korvaamatonta tukeaan, vaikka jäivätkin ajoittain vaille huomiotamme viimeisien kuukausien aikana.