Etusivu

C/C++ teoria
Ohjelmointitesti
C-kielen alkeet
C++-alkeet
C++-taulukkoja
Koodausohjeita
C++ tehtävät
C++ perusteet
C++ vaikeat
C++ syventävät
Kertaustehtäviä
Win32-teoria
Ohjelmointitesti
Ohjelmointimalli
Ikkunaluokat
Lyhyt pohja
Laajennettu pohja
Win32-tehtävät
Win32 perusteet
Win32 vaikeat
Win32 syventävät
MFC-teoria
Kontrolliluokat
MFC-luokat
Lyhyt pohja
Laajennettu pohja
MFC-tehtävät
MFC perusteet
MFC vaikeat
MFC syventävät
Java-teoria
Javan alkeet
Java pohja
Java-tehtävät
Java konsoli
Java perusteet
Java vaikeat
Java syventävät
 
Ikkunaluokat
Kontrollit
Kaikki käyttäjän näkemät painikkeet, listat, scrollauspalkit jne. ovat ohjelmoijan kannalta ikkunoita tai oikeammin kontrolleja. Kontrollit ovat täysin itsenäisiä ohjelmakokonaisuuksia joiden suoritustapaa ja -toimintaa on melkoisen vaikea muuttaa. Ne osaavat automaattisesti käsitellä sanomat, piirtää itsensä ja yleensäkin tehdä toiminnon johon kyseinen kontrolli on suunniteltu. Painonappi on tarkoitettu painettavaksi hiirellä ja käyttäjä ymmärtää sen aloittavan jonkin toiminnan. Vierityspalkilla puolestaan pitää vierittää listan tai ikkunan näkyvää aluetta. Näiden peruskontrollien toimintaa ei pidäkkään muuttaa koska se aiheuttaa vain uuden opiskelun vaivan käyttäjältä.

Kontrolleja pystytään muokkaamaan sallituissa rajoissa valitsimilla. Esimerkiksi ryhmäkehys, painonappi, valintanappi ja valintaruutu (kts alla) ovat yksi ja sama kontrolli mutta sen ulkonäkö valitaan tietyllä valitsimella.

Kontrollit kertovat käyttäjän tekemistä toiminnoista omilla sanomillaan. Esimerkiksi kun nappia painetaan se piirtää itsensä ensin ala-asentoon ja käyttäjän päästäessä hiiren napin ylös, piirtää nappi itsensä yläasentoon. Nappi ei kuitenkaan osaa käynnistää mitään toimintoa itsestään vaan se lähettää ikkunalle, johon nappi on liitetty, sanoman. Tässä sanomassa kerrotaan yksityiskohtaisesti mikä nappi itseasiassa oli kysessä, jotta ohjelmoija pystyy erottamaan kaikki napit toisistaan, sekä toiminto mitä napille tapahtui. Nappi kertoo ala-asentoon joutumisen omalla sanomalla ja taas yläasentoon joutumisen toisella sanomalla. Myös hiiren tuplanapatus kerrotaan omalla sanomallaan. Ohjelmoija vastuulle jää käynnistää toiminto kun sopiva sanoma saadaan.

Tärkeimpiä kontrolliluokkia
button (nappi)

Tehtävä: Ryhmäkehys, painonappi, valintanappi tai valintaruutu.

Tärkeimmät valitsimet:

BS_PUSHBUTTON, painonappi
BS_AUTORADIOBUTTON, valintanappi
BS_AUTOCHECKBOX, valintaruutu
BS_3STATE, kolmitilainen valintaruutu
BS_GROUPBOX, ryhmäkehys

Tärkeimmät sanomat kontrollilta lomakkeelle:

BN_CLICKED, lapsi-ikkunaa on painettu

Tärkeimmät sanomat lomakkeelta kontrollilta:

BM_GETCHECK, palauttaa valintaruudun tai -napin tilan
BM_SETCHECK, asettaa valintaruudun tai -napin tilan
 

 

static (tekstikehys)

Tehtävä: Esittää tekstikentän lomakkeella jota ei voi muokata

Tärkeimmät valitsimet:

SS_CENTER, teksti keskitetään
SS_LEFT, teksti tasataan vasemmalle

Tärkeimmät sanomat: Ei yhtään
 

 

scrollbar (vierityspalkki)

Tehtävä: Käytetään lomakkeen tai jonkin kontrollin sisällön vierittämiseen

Tärkeimmät valitsimet:

SBS_VERT, pystysuuntainen palkki
SBS_HORZ, vaakasuuntainen palkki

Tärkeimmät sanomat kontrollilta lomakkeelle:

SB_PAGEDOWN, vierityspalkin kuilua painetaan
SB_PAGEUP, vierityspalkin kuilua painetaan
SB_LINEDOWN, vierityspalkin vierityspainiketta painetaan
SB_LINEUP, vierityspalkin vierityspainiketta painetaan
SB_THUMBPOSITION, vierityslaatikkoa siirretään
SB_THUMBTRACK, vierityslaatikko päästetään irti

 

edit (muokkausruutu)

Tehtävä: Esittää tekstikentän jota voidaan myös muokata

Tärkeimmät valitsimet:

ES_CENTER, teksti keskitetään
ES_MULTILINE, teksti jaetaan automaattisesti usealle riville

Tärkeimmät sanomat kontrollilta lomakkeelle:

EN_UPDATE, tekstiä on muuttunut
EN_CHANGE, tekstiä ollaan muuttamassa

Tärkeimmät sanomat lomakkeelta kontrollilta:

EM_UNDO, käyttäjä haluaa perua muutoksen
EM_GETLINE, kotrollin teksti kopioidaan puskuriin

 

listbox (luetteloruutu)

Tehtävä: Luetteloruutu, jossa näytetään useita tekstirivejä alekkain

Tärkeimmät valitsimet:

LBS_STANDARD, sisältää tyylit LBS_NOTIFY, LBS_SORT, WS_VSCROLL, WS_BORDER

Tärkeimmät sanomat kontrollilta lomakkeelle:

LBN_SELCHANGE, valinta on vaihdettu
LBN_DBLCLK, kontrollia tuplanautettiin

Tärkeimmät sanomat lomakkeelta kontrollilta:

LB_ADDSTRING, listaan lisätään uusi rivi
LB_GETCURSEL, hakee valitun rivin järjestysnumeron
LB_GETTEXT, hakee halutun rivin tekstin
LB_DELETESTRING, poistaa halutun rivin
LB_RESETCONTENT, koko lista tyhjennetään

 

combobox (yhdistelmäruutu)

Tehtävä: Edit tai static tyyppisen ja listbox typpisen kontollin yhdistelmä

Tärkeimmät valitsimet:

CBS_DROPDOWN, kontrolliin voidaan kirjoittaa
CBS_DROPDOWNLIST, kontrolliin ei voida kirjoittaa

Tärkeimmät sanomat kontrollilta lomakkeelle:

CBN_SELCHANGE, valinta on vaihdettu
CBN_DROPDOWN, avaa alasvetovalikon

Tärkeimmät sanomat lomakkeelta kontrollilta:

CB_ADDSTRING, listaan lisätään uusi rivi
CB_GETCURSEL, hakee valitun rivin järjestysnumeron
CB_DELETESTRING, poistaa halutun rivin
CB_GETLBTEXT, hakee valitun tekstin

 

common controls (yleiset kontrollit)comctl.gif (539 bytes)

Tehtävä: Windows 95 -tyylisiä lisäkontrolleja

Tärkeimmät valitsimet:

CCS_BOTTOM, riippuu kontrollista
CCS_TOP, riippuu kontrollista

Tärkeimmät sanomat kontrollilta lomakkeelle:

NM_CLICK, kontrollia on painettu
NM_DBLCLK, kontrollia on tuplanapautettu

Kontrollien ohjaaminen
Kontrolleja pystyy ohjaamaan kutsumalla erilaisia Windows API-funktioita. Nämä funktiot on kirjoitettu Microsoftin työpajoissa ja juuri näiltä on tarkoitus käyttää ohjelmoitaessa Windowsia. Kontrolleja luodaan CreateWindow()-funktilla. Sopivia parametrejä annettaessa saadaan tehtyä kaikki tarpeelliset kontrollit. Tärkeää on muistaa ottaa funktion palautusarvo talteen, se on ainoa keino saada kiinni tästä kontrollista kun sitä myöhemmin halutaan ohjata. Tämä "kahva" taytyy antaa parametrinä kaikissa muissa funktioissa jotta toiminto kohdistuu oikeaan osoitteeseen.

Alla on lista esimerkin omaisesti tärkeimmistä funktioista. Huomaa jokaisen metodin ensimmäinen parametri joka on juuri tuo kahva jonka CreateWindow() palauttaa.

Tärkeimpiä funktioita
 CreateWindow()

Tehtävä: Luo erityyppisiä lomakkeita ja kontrolleja

Parametrit:

1. Luotavan ikkunan luokan nimi, jokin ylempänä mainittu kontrolliluokka
2. Ikkunan otsikko, vapaata tekstiä
3. Ikkunan tyyli, jokin ylempänä mainittu valitsin
4. x-koordinaatti aluksi
5. y-koordinaatti aluksi
6. Ikkunan leveys
7. Ikkunan korkeus
8. Emoikkunan kahva, mihin kontrolli piirretään
9. Ikkunan valikon kahva, menuja harvoin konrolleilla on
10. Ohjelman ilmentymän kahva, Windows on moniajoympäristö joten ohjelma täytyy yksilöidä
11. Luontiparametrit

Palautusarvo: Kahva uuteen ikkunaan, muuten NULL

Esimerkki: hwndGroupbox = CreateWindow ( "button", NULL, WS_CHILD | WS_VISIBLE | BS_GROUPBOX, 10, 10, 300, 200, hwnd, (HMENU) 1, hInstance, NULL ) ;

 

GetClientRect()

Tehtävä: Palauttaa lomakkeen sen hetkisen koon

Parametrit:

1. Kohdeikkunan kahva
2. Osoite RECT-struktuurin omaavaan muuttujaan

Palautusarvo: Nolla jos epäonnistuu, muuten jokin muu

Esimerkki: static RECT rect ; GetClientRect ( hwnd, &rect ) ;

 

GetWindowText()

Tehtävä: Kopioi määritellyn tekstin valitusta kohdekontrollista merkkijonomuuttujaan

Parametrit:

1. Kohdeikkunan kahva
2. Merkkijonomuuttuja johon teksti kopioidaan
3. Kopioitavien merkkien lukumäärä

Palautusarvo: Kopioidun merkkijonon pituus

Esimerkki: int pituus = GetWindowText ( hwndEdit, bufferi, 10 ) ;

 

SetWindowText()

Tehtävä: Vaihdetaan kohdekontrollin näyttämä teksti

Parametrit:

1. Kohdeikkunan kahva
2. Merkkijono tai merkkijonomuuttuja

Palautusarvo: Nolla jos toiminto onnistuu, muuten jokin muu

Esimerkki: SetWindowText ( hwndStatic, "Uusi teksti" ) ;

 

SendMessage()

Tehtävä: Funktio lähettää halutunlaisen viestin lomakkeelle tai kontrollille

Parametrit:

1. kohdeikkunan kahva
2. sanoma
3. sanomasta riippuva
4. sanomasta riippuva

Palautusarvo: Riippuu sanomasta

Esimerkki: SendMessage ( hwndListbox, LB_ADDSTRING, 0, (LPARAM) bufferi ) ;

 

MessageBox()

Tehtävä: Kysyy käyttäjältä yksinkertaisia kysymyksiä pullahdusikkunalla

Parametrit:

1. Omistajaikkunan kahva
2. Tekstiviesti
3. Otsikko
4. Painonapit, modaalisuus ja kuvake

Palautusarvo: Riippuu käyttäjän painamasta painonapista

Esimerkki: int valinta = MessageBox ( hwnd, "Viesti tähän", "Otsikko", MB_YES ) ;

 

MoveWindow()

Tehtävä: Muuttaa minkä tahansa lomakkeen tai kontrollin paikkaa ja kokoa

Parametrit:

1. Kohdeikkunan kahva
2. Ikkunan vasen laita
3. Ikkunan yläreuna
4. Ikkunan leveys
5. Ikkunan korkeus
6. TRUE tai FALSE

Palautusarvo: Nolla jos epäonnistuu, muuten jokin muu

Esimerkki: MoveWindow ( hwndEdit, 50, 50, 100, 20, TRUE ) ;

 

Ikkunaproseduuri

Tehtävä: Koodi, joka käsittelee ohjelman käyttäjältä tulevan syötteen

Parametrit:

1. Ikkunan kahva
2. Sanoma
3. Riippuu sanomasta
4. Riippuu sanomasta

Palautusarvo: Nolla jos sanoma käsitellään, muuten DefWindowProc()-funktion palauttama arvo

Esimerkki: LRESULT CALLBACK WndProc ( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam )

 
Sivutilan tarjoaa Tietokonepalvelu Mikrolahti.