Win32 ikkunaluokat

Mureakuha

Loikkaa: valikkoon, hakuun

Sisällysluettelo

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. 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)

Kuva:Win32_nappiluokka.PNG

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

Tärkeimmät valitsimet (CreateWindow -funktio):

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

Tärkeimmät sanomat kontrollilta pääikkunalle (WM_COMMAND -viesti):

BN_CLICKED, lapsi-ikkunaa on painettu

Tärkeimmät sanomat pääikkunalta kontrollerille (SendMessage -funktio):

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

static (tekstikehys)

Kuva:Win32_staticluokka.PNG

Tehtävä: Esittää tekstikentän lomakkeella, jota ei voi käyttäjä muokata

Tärkeimmät valitsimet (CreateWindow -funktio):

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

scrollbar (vierityspalkki)

Kuva:Win32_vieritysluokka.PNG

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

Tärkeimmät valitsimet (CreateWindow -funktio):

  • SBS_VERT, pystysuuntainen palkki
  • SBS_HORZ, vaakasuuntainen palkki

Tärkeimmät sanomat kontrollilta (WM_COMMAND -viesti):

  • 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)

Kuva:Win32_muokkausluokka.PNG

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

Tärkeimmät valitsimet (CreateWindow -funktio):

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

Tärkeimmät sanomat kontrollilta (WM_COMMAND -viesti):

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

Tärkeimmät sanomat pääikkunalta kontrollerille (SendMessage -funktio):

  • EM_UNDO, käyttäjä haluaa perua muutoksen
  • WM_GETTEXT, kontrollin teksti kopioidaan puskuriin

listbox (luetteloruutu)

Kuva:Win32_listaluokka.PNG

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

Tärkeimmät valitsimet (CreateWindow -funktio):

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

Tärkeimmät sanomat kontrollilta (WM_COMMAND -viesti):

  • LBN_SELCHANGE, valinta on vaihdettu
  • LBN_DBLCLK, kontrollia tuplanautettiin

Tärkeimmät sanomat pääikkunalta kontrollerille (SendMessage -funktio):

  • 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)

Kuva:Win32_comboluokka.PNG

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)

Tehtävä: Lisäkontrolleja (internet -selaimen versiosta riippuvia). Ennen käyttöä on suoritettava käsky InitCommonControls() tai InitCommonControlsEx(&comm) riippuen mikä versio on käytössä. Kontrolleja on noin 20 erilaista.

Windows 3.1 oppaasta (uudemmissa tyylejä ja vaihtoehtoja enemmän)
luokan nimikuvaustyylejä
ANIMATE_CLASSvideopätkien näyttäminen-
HOTKEY_CLASSnäppäinyhdistelmät-
PROGRESS_CLASSedistymäpalkki-
STATUSCLASSNAMEtilarivi (ikkunan alalaita)SBARS_SIZEGRIP, CCS_TOP
TOOLBARCLASSNAMEnappipalkkiTBSTYLE_ALTDRAG, TBSTYLE_TOOLTIPS, TBSTYLE_WRAPABLE
TOOLTIPS_CLASSponnahtavat vinkitTTS_ALWAYSTIP, TTS_NOPREFIX
TRACKBAR_CLASSliukukytkinTBS_HORZ, TBS_VERT, TBS_AUTOTICKS, TSM_NOTICKS, TBS_BOTTOM, TBS_TOP, TBS_RIGHT, TBS_LEFT, TBS_BOTH, TBS_ENABLESELRANGE, TBS_FIXEDLENGTH, TBS_NOTHUMB
UPDOWN_CLASSedit, jossa napit ylös ja alas tai vasemmalle ja oikealleUDS_ALIGNLEFT, UDS_ALIGNRIGHT, UDS_ARROWKEYS, UDS_NOTHOUSANDS, UDS_HORZ, UDS_WRAP, UDS_SETBUDDYINT, UDS_AUTOBUDDY
WC_HEADERotsikkorivi (listaan)HDS_BUTTONS, HDS_HORZ, HDS_HIDDEN
WC_LISTVIEWlista (taulukko)noin 20 tyyliä
WC_TABCONTROLvälilehdetyli 10 tyyliä
WC_TREEVIEWpuuTVS_HASLINES, TVS_LINESATROOT, TVS_HASBUTTONS, TVS_LINESATROOT, TVS_EDITLABELS, TVS_SHOWSELALWAYS
Drag List Boxlista, jonka järjestystä voi muuttaa raahaamallaPerustetaan MakeDragList -funktiolla
ImagelistkuvaluetteloPerustetaan ImageList_Create -funktiolla
Property SheetsPerustetaan CreatePropertySheetPage ja PropertySheet -funktioilla
RichEditedit, mutta enemmän tyylejänoin 20 tyyliä, yleisin ES_MULTILINE

Katso kontrolleriin liittyvät perustamisparametrit ja viestit Windowsin oppaista.

Yleiset sanomat kontrollilta ikkunalle:

  • NM_CLICK, kontrollia on painettu
  • NM_DBLCLK, kontrollia on tuplanapautettu

Kontrollien ohjaaminen

Kontrolleja pystyy ohjaamaan kutsumalla Windows API-funktioita eli järjestelmässä olevien dll -tiedostojen funktioita (esim. user32.dll ja comctl32.dll). Kontrolleja luodaan CreateWindow()-funktiolla. 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" täytyy 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

HWND CreateWindow(lpClassName,lpWindowName,dwStyle,x,y,nWidth,nHeight,hWndParent,hMenu,hInstance,lpParam);

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 ) ;

Ikkunaproseduuri

LRESULT CALLBACK WindowProc(hwnd, uMsg, wParam, lParam);

Tehtävä: Koodi, joka käsittelee ohjelman käyttöjärjestelmästä tulevat viestit (käyttäjän toimet)

Parametrit:

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

Palautusarvo: Riippuu viestistä, mutta yleensä nolla jos sanoma käsitellään. Muuten DefWindowProc()-funktion palauttama arvo

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

DefWindowProc

LRESULT DefWindowProc(hWnd, Msg, wParam, lParam);

Tehtävä: viestien oletuskäsittely. Jos koodissa ei haluta käsitellä kaikkia käyttöjärjestelmästä tulevia viestejä, loput viestit voi antaa tälle funktiolle.

Parametrit: samat kuin edellisessä.

SendMessage

LRESULT SendMessage(hWnd, Msg, wParam, lParam);

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 ) ;

PostQuitMessage

void PostQuitMessage(nExitCode);

Tehtävä: Lopetetaan säie (thread). Käytetään yleensä ikkunan WM_DESTROY -viestissä. Funktio lähettää WM_QUIT -viestin, jolloin GetMessage -funktio saa paluuarvon 0.

Parametri: lopetuskoodi

GetClientRect

BOOL GetClientRect(hWnd, lpRect);

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

int GetWindowText(hWnd, lpString, nMaxCount);

Tehtävä: Kopioi määritellyn tekstin valitusta kohdekontrollista merkkijonomuuttujaan. Tämä on sama kuin suora kutsu SendMessage(hWnd, WM_GETTEXT, nMaxCount, lpString).

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

BOOL SetWindowText(hWnd, lpString);

Tehtävä: Vaihdetaan kohdekontrollin näyttämä teksti. Tämä on sama kuin suora kutsu SendMessage(hWnd, WM_SETTEXT, 0, lpString).

Parametrit:

  1. Kohdeikkunan kahva
  2. Merkkijono tai merkkijonomuuttuja

Palautusarvo: Nolla jos toiminto onnistuu, muuten jokin muu

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

MessageBox

int MessageBox(hWnd, lpText, lpCaption, uType);

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

BOOL MoveWindow(hWnd, x, y, nWidth, nHeight, bRepaint);

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 ) ;

Tämän dokumentin kopiointi, levittäminen sekä muokkaaminen on sallittua GNU Free Documentation Licensen version 1.2 tai uudemman Free Software Foundationin julkaiseman version mukaisesti, ilman muuttumattomuuslauseketta tai kansitekstejä. Tätä koskee vastuuvapaus.
Kopio lisenssistä (englanniksi) löytyy täältä.


Alkuperäinen (c) Petteri Hämäläinen

Henkilökohtaiset työkalut