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
 
Windows-ohjelmointimalli
Sanomapohjaisuus

Oheinen kuva esittää yleisesti sanomapohjaista ohjelmointiympäristöä.  Tällaisia ympäristöjä ovat kaikki Windows versiot, Unix, Linux, Symbian ja yleensäkin kaikki graafiset käyttöjärjestelmät. Tekstipohjaisissa ohjelmissa sanomia ei ole koska käyttäjä ei voi tehdä kuin yhtä asiaa kerrallaan. Hiiren käyttö mahdollistaa käyttäjältä tiedon syöttämisen useista vaihtoehtoisista kohteista ja ohjelman täytyy reagoida kaikkiin herätteisiin oikein.

Windows-käyttöjärjestelmissä tärkeimmät sanomat ovat WM-alkuisia (WM = Windows Message). Nämä sanomat ovat vain C-kielen define-määrittelyllä tehtyjä numerovakioita. Ohjelmointia helpottamaan sanomat on nimetty kuvaamaan tapahtumaa. Esimerkiksi WM_PAINT tarkoittaa että ohelman tulisi piirtää ruutunsa uudelleen mahdollisesti koska käyttäjä on siirtänyt ikkunaa, ohjelman on peittänyt toinen ohjelmaikkuna tai ehkä käyttäjä on vaihtanut Windowsin asetuksia ja ikkunan taustaväri pitää piirtää toisella värillä. Mahdollisuuksia on useitä eikä sillä ohjelmoinnin kannalta ole mitään merkitystä.

Sanomia siis tulee epämääräisessä järjestyksessä, ajoin ja epämääräisille kohteille. Hetkittäin voi olla ettei ohjelma saa yhtään sanomaa mutta seuraavassa tilanteessa niitä tulee ryöpsähdyksen omaisesti enemmän kuin käyttöjärjestelmä pystyy käsittelemään. Tästä syytä kaikki sanomat joutuvat sanomajonoon ennen suoritusta. Tämä jono sijaitsee käyttöjärjestelmän sydämessä eikä siihen ole mitään ohjelmallista pääsykeinoa.

Sanomajonosta käyttöjärjestelmä noutaa suoritukseen joutuvat sanomat ja antaa sen sanoman kohteena olevalle ohjelmalle. Se joutuu ohjelman omaan sanomasilmukkaan josta ne tulevat varsinaiseen suorituskoodiin itse ohjelman ikkunaproseduuriin. Tyypillisesti ikkunaproseduurissa on suuri switch-case-rakenne jossa on oma case-kohtansa jokaiselle sanomalle. Tässä ohjelmoijan tehtäväna on kirjoittaa koodi jotta ohjelman toiminta olisi oikein. Esimerkiksi kuvankäsittelyohjelmassa WM_PAINT sanomassa piirretään käsiteltävä kuva.

Mikäli ohjelmoija ei halua muutta sanoman oletustoimintaa voi työn jättää käyttöjärjestelmälle. Tällön sanoma menee sanomien oletuskäsittelijälle. Esimerkiksi omassa ohjelmassasi voit jättää WM_SIZE sanoman käsittelemättä koska Windows osaa piirtää ikkunan uudelleen jos sen kokoa muutetaan.

ohjelmointimalli.gif (25793 bytes)

Jeff Prosise: Programming Windows 95 with MFC

Tärkeimmät Windows-sanomat
WM_SIZE : Lomakkeen kokoa muutetaan

lParam alaosa: Lomakkeen uusi leveys
lParam yläosa: Lomakkeen uusi korkeus
wParam: Koon muuttamisen tyyppi

WM_COMMAND : Kontrollien sanomia

wParam alaosa: Lapsi-ikkunan tunnus
wParam yläosa: Tapahtuman tunnus
lParam: Lapsi-ikkunan kahva

WM_NOTIFY : Yleisten kontrollien sanomia

wParam: Lapsi-ikkunan tunnus
lParam: Osoite NMHDR-struktuurin omaavaan muuttujaan

WM_HSCROLL : Vaakasuuntaisen vierityspalkin sanomia

wParam alaosa: Luku, joka kertoo mitä vierityspalkille tehtiin, SB-alkuisia symbolivakioita
wParam yläosa: Riippuu alaosasta
lParam: Vaakasuuntaisen vierityspalkin kahva

WM_VSCROLL : Pystysuuntaisen vierityspalkin sanomia

wParam alaosa: Luku, joka kertoo mitä vierityspalkille tehtiin, SB-alkuisia symbolivakioita
wParam yläosa: Riippuu alaosasta
lParam: Pystysuuntaisen vierityspalkin kahva

WM_PAINT : Lomakkeen maalaussanoma

wParam: Piirtopinnan kahva
lParam: Ei ole

WM_DESTROY : Lomakkeen lopetussanoma

wParam alaosa: Ei ole
wParam yläosa: Ei ole
lParam: Ei ole

 
Sivutilan tarjoaa Tietokonepalvelu Mikrolahti.