1 of

Samankaltaiset tiedostot
Windowsin sanomanvälitys. Juha Järvensivu 2007

Windowsin sanomanvälitys. Juha Järvensivu 2008

Winapi. Juha Järvensivu 2007

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

Graafisen käyttöliittymän ohjelmointi

OpenGL:n perusteet - Osa 1: Ikkunan luominen

OpenGL:n perusteet - Osa 2: 3D grafiikka

Web Services tietokantaohjelmoinnin perusteet

5 Näppäimistö. 5.1 Näppäimistön eventit

TAITAJA 2007 ELEKTRONIIKKAFINAALI KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

PÄÄTTÖTYÖ YKSINKERTAISEN C-KIELISEN GRAAFISEN KÄYTTÖLIITTYMÄN LUONTI

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

ITKP102 Ohjelmointi 1 (6 op)

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Metodien tekeminen Javalla

1. Omat operaatiot 1.1

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Hiirisanomiin vastaaminen

sim.exe DLL DLL ISO 639 sim.exe DLL ISO 639

TIETORAKENTEET JA ALGORITMIT

Java-kielen perusteet

Pong-peli, vaihe Aliohjelmakutsu laskureita varten. 2. Laskurin luominen. Muilla kielillä: English Suomi

Muuttujien roolit Kiintoarvo cin >> r;

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

1. Taustatietoa näppäimistönkuuntelusta

Pikanäppäin Yhdistelmiä. Luku 6 Pikanäppäimet

Jypelin käyttöohjeet» Ruutukentän luominen

ITKP102 Ohjelmointi 1 (6 op)

// // whiledemov1.c // #include <stdio.h> int main(void){ int luku1 = -1; int luku2 = -1;

Peliohjelmointirajapinnoista

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout:

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Algoritmit 1. Demot Timo Männikkö

Ohjelmointi 2 / 2010 Välikoe / 26.3

2010-luvun kansalaistaito: Windows-puhelimen ohjelmointi. Kai Lindgren, Teollinen tuotanto/metropolia

12. Javan toistorakenteet 12.1

Ohjelmointiharjoituksia Arduino-ympäristössä

Jypelin käyttöohjeet» Miten lisään ohjaimet peliin

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

11. Javan toistorakenteet 11.1

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

NÄIN TEET VIDEO-MAILIN (v-mail)

Olio-ohjelmointi Javalla

Ohjelmointi 2 / 2011 Välikoe / 25.3

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++

Java-kielen perusteita

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

5. HelloWorld-ohjelma 5.1

6.3. AVR_rauta. EEPROM-muisti pva

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

12. Javan toistorakenteet 12.1

Graafisen käyttöliittymän ohjelmointi Syksy 2013

XNA grafiikka laajennus opas. Paavo Räisänen. Tämän oppaan lähdekoodit ovat ladattavissa näiden sivujen Ladattavat osiossa.

ITKP102 Ohjelmointi 1 (6 op)

Lupa opetuskäyttöön pyydettävä. Näppäimistö. Kohdistimen ohjausnäppäimistö. Funktionäppäimistö. Kirjoitusnäppäimistö

Luento 5. Timo Savola. 28. huhtikuuta 2006

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

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

JavaScript alkeet Esimerkkikoodeja moniste 2 ( Metropolia)

Java-kielen perusteet

3. Binääripuu, Java-toteutus

Interaktiivinen käyttöliittymä. 2008

11. Javan valintarakenteet 11.1

Javan perusteita. Janne Käki

Eclipse ja JUnit-ohjelmoijatestit

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

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

C# Windows ohjelmointi perusopas

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

11. Javan valintarakenteet 11.1

Ohjelmoinnin perusteet Y Python

ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Jukka Helle

Ohjelmoinnin perusteet Y Python

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

7. Näytölle tulostaminen 7.1

Luokan muodostimet (Constructors)

Hiirisanomiin vastaaminen. 2007

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

Tech Conference Visual Studio 2015, C#6,.NET4.6. Heikki Raatikainen. #TechConfFI

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

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

SQL Buddy JAMK Labranet Wiki

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

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

Olio-ohjelmointi Syntaksikokoelma

public static void main (String [] args)

Sovellusten ohjelmointi Microsoft Foundation Classes -luokkien avulla

Mikä yhteyssuhde on?

Ohjelmoinnin perusteet Y Python

Transkriptio:

http:people.cc.jyu.fi/~minurmin/gko/materiaali/esimerkit/... http:people.cc.jyu.fi/~minurmin/gko/materiaali/esimerkit/... /* PROGRAM: Mhello.c PURPOSE: "Pienin Windows-ohjelma". Tulostaa näyttöön tekstin Hello World Editor: Vesa Lappalainen typistänyt malliohjelmista. Project: mhello.c, mhello.def */ #include <windows.h> /* Tarvitaan kaikissa Windows C-ohjelmissa */ LONG CALLBACK _export MainWndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) PAINTSTRUCT ps; switch (message) case WM_PAINT: /* Viesti: Piirrä ikkuna uudelleen */ if ( BeginPaint(hWnd,&ps) ) TextOut(ps.hdc, 10, 10, "Hello World!",12); EndPaint(hWnd,&ps); case WM_DESTROY: /* Viesti: ikkuna hävitetään */ PostQuitMessage(0); default: /* Antaa Windowsin käsitellä muut */ return DefWindowProc(hWnd, message, wparam, lparam); int PASCAL WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) WNDCLASS wc; /* Ikkunaluokka */ HWND hwnd; /* Pääikkunan kahva */ MSG msg; /* Viesti */ (void)lpcmdline; /* Hämäystä, jottei valitusta param. käytt. */ if-lause ei ole tarpeen WIN32-sovelluksissa (win95 ja myöhemmissä hprevinstance on aina NULL), koska jokaista sovellusta ajetaan omassa koodisegmentissään. if-lause säilytetty yhteensopivuuden vuoksi. MN / 3.6.2004 if (!hprevinstance) Onko muita esiintymiä käynnisssä? wc.style = 0 ; wc.lpfnwndproc = MainWndProc; wc.cbclsextra = 0; wc.cbwndextra = 0; wc.hinstance = hinstance; wc.hicon = LoadIcon(NULL, IDI_APPLICATION); wc.hcursor = LoadCursor(NULL, IDC_ARROW); wc.hbrbackground = GetStockObject(WHITE_BRUSH); wc.lpszmenuname = NULL; wc.lpszclassname = "WHelloWClass"; if (!RegisterClass(&wc)) return 1; /* samplew.c */ /* PROGRAM: samplew.c PURPOSE: Runko yksinkertaisille Windows-ohjelmille. Kirjoitetaan tiedosto, jossa on funktiot MyMove (kun hiiri liikkunut) MyDown (kun hiiren näppäin alhaalla) MyUp (kun hiiren nappi päästetty ylös) ja MyDraw (vaikkapa tiedostoon myown.c) sekä merkkijono WindowName ja tehdään projekti, jossa on tiedostot samplew.c myown.c samplew.def ja käännetään! Siinä se! Editor: Vesa Lappalainen 15.8.1992 */ #include <windows.h> /* Tarvitaan kaikissa Windows C-ohjelmissa */ #define MAINWNAME "SampleWClass" /* Tunniste, jolla ikkunaluokka tunnetaan */ extern char *WindowName; extern void MyDraw(HWND hwnd, HDC hdc); extern void MyDown(HWND hwnd, WORD wparam, LONG lparam); extern void MyUp (HWND hwnd, WORD wparam, LONG lparam); extern void MyMove(HWND hwnd, WORD wparam, LONG lparam); LONG CALLBACK _export MainWndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) PAINTSTRUCT ps; switch (message) case WM_PAINT: /* Viesti: Piirrä ikkuna uudelleen */ if ( BeginPaint(hWnd,&ps) ) MyDraw(hWnd,ps.hdc); EndPaint(hWnd,&ps); case WM_LBUTTONDOWN: /* Hiiren vasen nappi alas: */ MyDown(hWnd,wParam,lParam); case WM_LBUTTONUP: /* Hiiren vasen nappi ylös: */ MyUp(hWnd,wParam,lParam); hwnd = CreateWindow("WHelloWClass","Windows Hello",WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,hInstance,NULL); if (!hwnd ) return 1; ShowWindow(hWnd, ncmdshow); /* Näytetään ikkuna */ UpdateWindow(hWnd); /* Lähetetään WM_PAINT viesti */ while (GetMessage(&msg,NULL,0,0)) TranslateMessage(&msg); /* Tulkitaan virtuaaliset näp. koodit */ DispatchMessage(&msg); /* Lähetetään viesti ikkunalle */ return msg.wparam; /* Palautetaan PostQuitMessage-funktion arvo */ case WM_MOUSEMOVE : /* Hiirtä siirretty: */ MyMove(hWnd,wParam,lParam); case WM_DESTROY: /* Viesti: ikkuna hävitetään */ PostQuitMessage(0); default: /* Antaa Windowsin käsitellä muut */ return (DefWindowProc(hWnd, message, wparam, lparam)); 1 of 1 3.6.2004 19:43 1 of 2 3.6.2004 19:52

http:people.cc.jyu.fi/~minurmin/gko/materiaali/esimerkit/... http:people.cc.jyu.fi/~minurmin/gko/materiaali/esimerkit/... int PASCAL WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) WNDCLASS wc; /* Ikkunaluokka */ HWND hwnd; /* Pääikkunan kahva */ MSG msg; /* Viesti */ (void)lpcmdline;/* Hämäystä, jottei valitusta param. käytt. */ if (!hprevinstance) /* Onko muita esiintymiä käynnisssä? */ wc.style = NULL; wc.lpfnwndproc = MainWndProc; wc.cbclsextra = 0; wc.cbwndextra = 0; wc.hinstance = hinstance; wc.hicon = LoadIcon(NULL, IDI_APPLICATION); wc.hcursor = LoadCursor(NULL, IDC_ARROW); wc.hbrbackground = GetStockObject(WHITE_BRUSH); wc.lpszmenuname = NULL; wc.lpszclassname = MAINWNAME; if (!RegisterClass(&wc)) return (FALSE); hwnd = CreateWindow(MAINWNAME,WindowName,WS_OVERLAPPEDWINDOW /* CS_SAVEBITS */, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, NULL,NULL,hInstance,NULL); if (!hwnd) return (FALSE); ShowWindow(hWnd, ncmdshow); /* Näytetään ikkuna */ UpdateWindow(hWnd); /* Lähetetään WM_PAINT viesti */ while (GetMessage(&msg,NULL,NULL,NULL)) TranslateMessage(&msg); /* Tulkitaan virtuaaliset näp. koodit */ DispatchMessage(&msg); /* Lähetetään viesti ikkunalle */ return (msg.wparam); /* Palautetaan PostQuitMessage-funktion arvo */ /* kolmio.c */ /* Malliohjelma kauan kestävästä piirtämisestä. Piirretään rekursiivisesti joukko kolmioita. Vesa Lappalainen 16.8.1992 & 14.6.1994 Kääntäminen: Tee projektio kolmio.prj: kolmio.c simplet.def ALI\timer.c ALI\tabhand.c Tehtäviä 1) Kokeile piirtämisen aikana valita ikkunan suurennus tms. tai paina vaikkapa kahdesti (molemmat välillä irti) ALT-TAB. Säädä ohjelman suoritusaikaa muuttelemalla vakiota PIENIN_KOLMIO (pieni->kauan, iso-> nopea). Mikä vika on ohjelmassa? Käynnistä samanaikaisesti jokin toinen ohjelma ja säädä sen ikkunan niin pieneksi, ettei se peitä kuin osaksi "Kolmiot" ikkunaa. Laita sitten ikkunoiden järjestys siten, että "Kolmiot"-ikkuna on toiseksi ylin ja avaamasi pikku-ikkuna on ylimpänä. Siirtele pikkuikkunaa kolmiot ikkunan päällä! 2) Ohjelmaikkunan otsikkoksi muuttuu aika, jonka ikkunan uudelleen piirtäminen vei. Kokeile peittää ikkunaa eri tavoin toisella ikkunalla ja koeta keksiä syy, miksi uudelleen piirto vie eri ajan peiton suuruudesta riippuen. 3) Ohjelmaan liittyy myös "höpö-höpö"-piirtäminen. Miten luulet piirtämisen toimivan? Käy välillä toisessa ikkunassa ja palaa takaisin ohjelmaan. Mitä käy piirroksille? 4) Muuta "piirtäminen" sellaiseksi, että kun hiiren nappi painetaan alas, aletaan piirtämään viivaa kunnes nappi päästetään ylös. Mitä tapahtuu kun nappi päästetäänkin ylös "Kolmiot"-ikkunan ulkopuolella ja sitten tuodaan hiiri takaisin ikkunan sisälle nappi ylhäällä? 5) Miten "Piirtäminen" pitäisi muuttaa, jotta kuva korjautuisi toisessa ikkunassa käymisen jälkeen? ----------------------------------------------------------------------------*/ #include <windows.h> #include <stdio.h> #include <math.h> #include "timer.h" #include "tabhand.h" /*/ TblClassSWindowMAIN("TriangleClass",0,"Kolmio",MsgTbl,0); /*/ #define PIENIN_KOLMIO 0.2 /* Säädä tällä kauanko koko kuvan piirt. kest. */ #define I(x,y) hdc,((int)(x)),((int)(y)) void kolmio(hdc hdc, double x, double y, double h) double s2 = h / (sqrt(3)); 2 of 2 3.6.2004 19:52 1 of 3 3.6.2004 19:53

http:people.cc.jyu.fi/~minurmin/gko/materiaali/esimerkit/... http:people.cc.jyu.fi/~minurmin/gko/materiaali/esimerkit/... MoveToEx(I(x,y),NULL); LineTo(I(x-s2,y-h)); LineTo(I(x+s2,y-h)); LineTo(I(x,y)); if ( h < PIENIN_KOLMIO ) return; kolmio(hdc,x-s2,y,h/2); /* Pienempi kolmio vasemmalle */ kolmio(hdc,x+s2,y,h/2); /* Pienempi kolmio oikealle */ kolmio(hdc,x,y-h,h/2); /* Pienempi kolmio yläpuolelle*/ static EVENT WM_paint(tMSGParam *msg) /* # MAKE_DC # */ char s[100]; SetWindowText(msg->hWnd,"Kolmio: Piirretään..."); start_timer(1); kolmio(msg->hdc,300,400,200); sprintf(s,"kolmio: %5.2lf s.",stop_timer(1)); SetWindowText(msg->hWnd,s); /* Seuraavissa aliohjelmissa on seuraavat parametrit: hwnd - ikkunan kahva wparam - SHIFT, CTRL ja ALT -näppäimen tile, voidaan testata esim. if ( wparam && MK_CONTROL )... hommat jos CTRL alhaalla lparam - x = LOWORD(lParam) ja y = HIWORD(lParam) kätevämpi on kuitenkin selvittää hiren paikka: POINTS pt = MAKEPOINTS(lParam) ----------------------------------------------------------------------------*/ static EVENT WM_mousemove(tMSGParam *msg) /* # MAKE_DC # */ /* Aliohjelmaa kutsutaan kun hiiri on liikkunut */ POINTS pt = MAKEPOINTS(msg->lParam); if (!pen_down ) MoveToEx(msg->hDC,old.x,old.y,NULL); LineTo(msg->hDC,pt.x,pt.y); static EVENT WM_create(tMSGParam *msg) /* Aliohjelmaa kutsutaan kun ikkuna on luotu, muttei vielä näytössä. */ MoveWindow(msg->hWnd,10,10,600,500,FALSE); /* Viestien käsittelytaulukko */ tmsgentry MsgTbl[] = EV_HANDLE_WM_DESTROY, WM_PAINT, DoC, DoC, WM_paint, MAKE_DC, /*a*/ WM_LBUTTONDOWN, DoC, DoC, WM_lbuttondown, /*a*/ WM_LBUTTONUP, DoC, DoC, WM_lbuttonup, /*a*/ WM_MOUSEMOVE, DoC, DoC, WM_mousemove, MAKE_DC, /*a*/ WM_CREATE, DoC, DoC, WM_create, /*a*/ 0 ; static POINTS old = 0,0; static pen_down = 0; static EVENT WM_lbuttondown(tMSGParam *msg) /* Aliohjelmaa kutsutaan kun hiiren nappa on painettu alas */ old = MAKEPOINTS(msg->lParam); pen_down = 1; static EVENT WM_lbuttonup(tMSGParam *msg) /* Aliohjelmaa kutsutaan kun hiiren nappi on päästetty ylös */ #pragma argsused pen_down = 0; 2 of 3 3.6.2004 19:53 3 of 3 3.6.2004 19:53

http:people.cc.jyu.fi/~minurmin/gko/materiaali/esimerkit/... http:people.cc.jyu.fi/~minurmin/gko/materiaali/esimerkit/... / PROGRAM: Thello.c PURPOSE: Ohjelma tyypillisten kontrollien testaamiseen. Editor: Vesa Lappalainen typistänyt malliohjelmista. Project: thello.c, whello.def / #include <windows.h> /* Tarvitaan kaikissa Windows C-ohjelmissa */ #include <windowsx.h> #define MY_BUTTON 175 /* Nappulan tunniste */ #define MY_EDIT 176 /* Tekstikentän (Edit) tunniste */ #define MY_BAR 177 /* Oman likusäätimen tunniste */ #define MY_STATIC 178 /* 1. vakiotekstin tunniste = liun arvo */ #define MY_BARS 179 /* apuvakio seuraaville */ #define MY_SVER (MY_BARS+SB_VERT) /* 2. tekstikenän tunniste = pystyliun */ #define MY_SHOR (MY_BARS+SB_HORZ) /* 3. tekstikentän tunniste = vaakaliun*/ #define MIN_BAR 0 #define MAX_BAR 50 static int value = 0; LONG CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) PAINTSTRUCT ps; switch (message) case WM_PAINT: /* Viesti: Piirrä ikkuna uudelleen */ if ( BeginPaint(hWnd,&ps) ) TextOut(ps.hdc, 10, 10, "Hello World!",12); EndPaint(hWnd,&ps); case WM_COMMAND: switch ( GET_WM_COMMAND_ID(wParam,lParam) ) case MY_BUTTON: /* Painonappia painettu */ SetDlgItemInt(hWnd,MY_STATIC,++value,TRUE); case MY_EDIT: /* Jos viesti teksti-ikkunalta */ switch ( GET_WM_COMMAND_CMD(wParam,lParam) ) case EN_CHANGE: /* Aina kun sisältö muuttuu, lisät.lask */ SetDlgItemInt(hWnd,MY_STATIC,++value,TRUE); case EN_KILLFOCUS: /* Teksti-ikkunasta poistuttu */ char svalue[20]; GetDlgItemText(hWnd,MY_EDIT,svalue,sizeof(svalue)); SetWindowText(hWnd,svalue); /* Sama tulos pääótsikkoon */ default: case WM_VSCROLL: /* Johonkin pysytliukuun koskettu */ HWND shwnd = GET_WM_VSCROLL_HWND(wParam,lParam); int fnbar = SB_CTL; int id = GetDlgCtrlID(shWnd); if ( shwnd == NULL ) shwnd = hwnd; id = SB_VERT; fnbar = SB_VERT; switch ( GET_WM_VSCROLL_CODE(wParam,lParam) ) case SB_BOTTOM : value = MIN_BAR; case SB_TOP : value = MAX_BAR; case SB_LINEDOWN : value++; case SB_PAGEDOWN : value += 10; case SB_LINEUP : value--; case SB_PAGEUP : value -= 10; case SB_THUMBPOSITION: case SB_THUMBTRACK : value = GET_WM_VSCROLL_POS(wParam,lParam); SetScrollPos(shWnd,fnBar,value,TRUE); SetDlgItemInt(hWnd,id == MY_BAR? MY_STATIC : MY_SVER,value, TRUE); case WM_DESTROY: /* Viesti: ikkuna hävitetään */ PostQuitMessage(0); default: /* Antaa Windowsin käsitellä muut */ return DefWindowProc(hWnd, message, wparam, lparam); int PASCAL WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) HWND hwnd,hctrl;/* Pääikkunan kahva ja apukahva kontrollien luontiin. */ WNDCLASS wc; /* Ikkunaluokka */ MSG msg; /* Viesti */ (void)lpcmdline; /* Hämäystä, jottei valitusta param. käytt. */ if (!hprevinstance) /* Onko muita esiintymiä käynnisssä? */ wc.style = NULL; wc.lpfnwndproc = MainWndProc; wc.cbclsextra = 0; wc.cbwndextra = 0; wc.hinstance = hinstance; wc.hicon = LoadIcon(NULL, IDI_APPLICATION); wc.hcursor = LoadCursor(NULL, IDC_ARROW); wc.hbrbackground = GetStockObject(WHITE_BRUSH); wc.lpszmenuname = NULL; wc.lpszclassname = "WHelloWClass"; if (!RegisterClass(&wc) ) return 1; hwnd = CreateWindow("WHelloWClass","Windows Hello", WS_CAPTION WS_BORDER WS_VSCROLL WS_HSCROLL WS_SYSMENU WS_THICKFRAME WS_MINIMIZEBOX WS_MAXIMIZEBOX, 50,50,300,300,NULL,NULL,hInstance,NULL); if (!hwnd ) return 1; ShowWindow(hWnd,nCmdShow); /* Näytetään ikkuna */ hctrl = CreateWindow("Button","Windows Hello", WS_BORDER WS_CHILD WS_VISIBLE, 10,30,100,30,hWnd,(HMENU)MY_BUTTON,hInstance,NULL); hctrl = CreateWindow("Static","0",WS_CHILD WS_VISIBLE SS_RIGHT, 40,70,40,30,hWnd,(HMENU)MY_STATIC,hInstance,NULL); hctrl = CreateWindow("Static","0",WS_CHILD WS_VISIBLE SS_RIGHT, 80,70,40,30,hWnd,(HMENU)MY_SHOR,hInstance,NULL); hctrl = CreateWindow("Static","0",WS_CHILD WS_VISIBLE SS_RIGHT, 120,70,40,30,hWnd,(HMENU)MY_SVER,hInstance,NULL); hctrl = CreateWindow("Edit","Windows Hello", WS_DLGFRAME WS_CHILD WS_VISIBLE, 10,110,100,40,hWnd,(HMENU)MY_EDIT,hInstance,NULL); hctrl = CreateWindow("Scrollbar","Windows Hello", WS_CHILD WS_VISIBLE SBS_VERT, 200,10,30,200,hWnd,(HMENU)MY_BAR,hInstance,NULL); 1 of 3 3.6.2004 19:53 2 of 3 3.6.2004 19:53

http:people.cc.jyu.fi/~minurmin/gko/materiaali/esimerkit/... http:people.cc.jyu.fi/~minurmin/gko/materiaali/esimerkit/w... SetScrollRange(hCtrl,SB_CTL,MIN_BAR,MAX_BAR,TRUE); SetScrollRange(hWnd,SB_VERT,MIN_BAR,2*MAX_BAR,TRUE); SetScrollRange(hWnd,SB_HORZ,MIN_BAR,3*MAX_BAR,TRUE); while ( GetMessage(&msg,NULL,NULL,NULL) ) TranslateMessage(&msg); /* Tulkitaan virtuaaliset näp. koodit */ DispatchMessage(&msg); /* Lähetetään viesti ikkunalle */ return msg.wparam; /* Palautetaan PostQuitMessage-funktion arvo */ /* laskurir.c */ / PROGRAM: laskurir.c Windows: Win 3.1 & WIN32 PURPOSE: Autolaskuri tehtynä mahd. pitkälle Windowsin resursseilla. Editor: Vesa Lappalainen Projektiin tarvitaan laskurir.c - tämä tiedosto laskurir.def - moduulin määrittely laskurir.rc - resurssit Tehtäviä: 1) Lisää polkupyörien laskeminen (käytä.rc tiedoston korjailemiseen Resource WorkShopia) 2) Lisää +/- toiminto näppäinten avulla 3) Muuta.rc tiedostoa siten, että myös DEL-näppäin tyhjentää näytön. / #include <windows.h> #include <windowsx.h> /* Tarvitaan 32-bit yhteensopivuudeksi */ #include "laskurir.h" static int laskurit[laskureita] = 0,0; BOOL CALLBACK _export MainWndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) #pragma argsused switch (message) case WM_COMMAND: int id = GET_WM_COMMAND_ID(wParam,lParam); /* Jotta WIN32 toimisi */ switch ( id ) case HA: /* Painonappia painettu */ case KA: SetDlgItemInt(hWnd,id-HA+HAL,++laskurit[id-HA],TRUE); return TRUE; case NOLLAA: int i; for (i=0; i<laskureita; i++) SetDlgItemInt(hWnd,i+HAL,laskurit[i] = 0,TRUE); return TRUE; /* NOLLAA */ case IDCANCEL: case EXIT: PostQuitMessage(0); return TRUE; /* switch (id) */ /* WM_COMMAND */ /* switch ( message ) */ return FALSE; int PASCAL WinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPSTR lpcmdline, int ncmdshow) #pragma argsused MSG msg; FARPROC lproc = MakeProcInstance((FARPROC)MainWndProc,hInstance); HWND hwnd = CreateDialog(hInstance,"LASKURI",NULL,(DLGPROC)lProc); HACCEL haccel = LoadAccelerators(hInstance,"PIKA"); if (!hwnd ) goto lopetus; while (GetMessage(&msg,NULL,NULL,NULL)) 3 of 3 3.6.2004 19:53 1 of 2 3.6.2004 20:15

http:people.cc.jyu.fi/~minurmin/gko/materiaali/esimerkit/w... http:people.cc.jyu.fi/~minurmin/gko/materiaali/esimerkit/w... if ( TranslateAccelerator(hWnd,hAccel,&msg) ) continue; if ( IsDialogMessage(hWnd,&msg) ) continue; TranslateMessage(&msg); /* Tulkitaan virtuaaliset näp. koodit */ DispatchMessage(&msg); /* Lähetetään viesti ikkunalle */ lopetus: (void)freeprocinstance(lproc); /* void, jottei 32-bit kääntäjä valita */ #include "laskurir.h" LASKURI DIALOG 17, 25, 180, 88 STYLE WS_OVERLAPPED WS_VISIBLE WS_CAPTION WS_SYSMENU WS_MINIMIZEBOX CAPTION "LASKURIR" CONTROL "&Henkilöautoja", HA, "BUTTON", BS_PUSHBUTTON WS_CHILD WS_VISIBLE WS_TABSTOP, 33, 10, 50, 20 CONTROL "&Kuorma-autoja", KA, "BUTTON", BS_PUSHBUTTON WS_CHILD WS_VISIBLE WS_TABSTOP, 100, 10, 50, 20 CONTROL "0 ", HAL, "STATIC", SS_RIGHT WS_CHILD WS_VISIBLE WS_BORDER WS_GROUP, 31, 40, 50, 10 CONTROL "0 ", KAL, "STATIC", SS_RIGHT WS_CHILD WS_VISIBLE WS_BORDER WS_GROUP, 100, 40, 50, 10 CONTROL "&Nollaa", NOLLAA, "BUTTON", BS_PUSHBUTTON WS_CHILD WS_VISIBLE WS_TABSTOP, 50, 60, 80, 20 CONTROL "e&xit", EXIT, "BUTTON", BS_PUSHBUTTON WS_CHILD WS_VISIBLE WS_TABSTOP, 0, 0, 24, 14 PIKA ACCELERATORS "K", KA "k", KA "H", HA "h", HA "N", NOLLAA "n", NOLLAA "X", EXIT "x", EXIT 2 of 2 3.6.2004 20:15 1 of 1 3.6.2004 20:25

http:people.cc.jyu.fi/~minurmin/gko/materiaali/esimerkit/... http:people.cc.jyu.fi/~minurmin/gko/materiaali/esimerkit/... /* kolmio.cpp */ Ohjelma, joka aukaisee yhden ikkunan ja piirtää siihen rekursiivisen kolmion. Esimerkki kuvan päiväittämisestä ja piirtämisen kestosta /vl-96 Projektiin kolmio.cpp ja ALI\timer.c. MFC 4.1 Tehtäviä: #include <afxwin.h> #include <math.h> #include <stdio.h> #include <math.h> #include "timer.h" #define PIENIN_KOLMIO 0.2 /* Säädä tällä kauanko koko kuvan piirt. kest. */ #define I(x,y) hdc,((int)(x)),((int)(y)) void kolmio(hdc hdc, double x, double y, double h) double s2 = h / (sqrt(3)); MoveToEx(I(x,y),NULL); LineTo(I(x-s2,y-h)); LineTo(I(x+s2,y-h)); LineTo(I(x,y)); if ( pholddc == NULL ) return; pholddc->moveto(old); pholddc->lineto(point); DECLARE_MESSAGE_MAP() ; _MESSAGE_MAP( CMainWindow, CFrameWnd ) ON_WM_PAINT() ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_MOUSEMOVE() _MESSAGE_MAP() ------------------------------------------------------------------------------ class CKolmioApp : public CWinApp public: virtual BOOL InitInstance() m_pmainwnd = new CMainWindow(); m_pmainwnd->showwindow(m_ncmdshow); m_pmainwnd->updatewindow(); return TRUE; ; ------------------------------------------------------------------------------ CKolmioApp KolmioApp; constructor initializes and runs the app if ( h < PIENIN_KOLMIO ) return; kolmio(hdc,x-s2,y,h/2); /* Pienempi kolmio vasemmalle */ kolmio(hdc,x+s2,y,h/2); /* Pienempi kolmio oikealle */ kolmio(hdc,x,y-h,h/2); /* Pienempi kolmio yläpuolelle*/ ------------------------------------------------------------------------------ class CMainWindow : public CFrameWnd CDC *pholddc; Siirron aikana käytössä oleva laiteyhteys CPoint old; public: CMainWindow() Create(NULL,"Kolmio"); pholddc = NULL; afx_msg void OnPaint() char s[100]; CPaintDC dc(this); SetWindowText("Piirretään..."); start_timer(1); kolmio(dc,300,400,200); sprintf(s,"kolmio: %5.2lf s.",stop_timer(1)); SetWindowText(s); afx_msg void OnLButtonDown(UINT modkeys, CPoint point) if ( pholddc!= NULL ) return; SetCapture(); Direct all subsequent mouse input to this window pholddc = new CClientDC(this); old = point; afx_msg void OnLButtonUp(UINT modkeys, CPoint point) if ( pholddc == NULL ) return; ReleaseCapture(); delete pholddc; pholddc = NULL; afx_msg void OnMouseMove(UINT modkeys, CPoint point) 1 of 2 3.6.2004 20:26 2 of 2 3.6.2004 20:26

http:people.cc.jyu.fi/~minurmin/gko/materiaali/esimerkit/... http:people.cc.jyu.fi/~minurmin/gko/materiaali/esimerkit/... /* laskuri.cpp */ Esimerkki Autolaskurista. Projektiin laskuri.cpp ja laskuri.rc #include <afxwin.h> #include "laskuri.rh" ------------------------------------------------------------------------------ class TLaskuriDialog : public CDialog public: TLaskuriDialog(LPCSTR name,cwnd *parent=null) : CDialog(name,parent) void BNHAClicked() SetDlgItemInt(HAL,GetDlgItemInt(HAL)+1); void BNKAClicked() SetDlgItemInt(KAL,GetDlgItemInt(KAL)+1); void BNNollaaClicked() SetDlgItemInt(HAL,0); SetDlgItemInt(KAL,0); void BNExitClicked() EndDialog(0); DECLARE_MESSAGE_MAP() ; /* laskurir.h */ #define LASKUREITA 2 #define HA 1000 #define KA HA+1 #define HAL 1010 #define KAL HAL+1 #define EXIT 1027 #define NOLLAA 1028 _MESSAGE_MAP(TLaskuriDialog, CDialog) ON_COMMAND(HA, BNHAClicked) ON_COMMAND(KA, BNKAClicked) ON_COMMAND(NOLLAA,BNNollaaClicked) ON_COMMAND(EXIT,BNExitClicked) _MESSAGE_MAP() class TLaskuriApp : public CWinApp public: virtual BOOL InitInstance() TLaskuriDialog dlg("laskuri"); Tyylinä WS_OVERLAPPED m_pmainwnd = &dlg; ; dlg.domodal(); return FALSE; Lopetetaan samalla koko ohjelma TLaskuriApp LaskuriApp; constructor initializes and runs the app 1 of 1 3.6.2004 20:26 1 of 1 3.6.2004 20:26

http:people.cc.jyu.fi/~minurmin/gko/materiaali/esimerkit/... http:people.cc.jyu.fi/~minurmin/gko/materiaali/esimerkit/... Microsoft Developer Studio generated resource script. #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS / Generated from the TEXTINCLUDE 2 resource. #include "afxres.h" / #undef APSTUDIO_READONLY_SYMBOLS / Finnish resources #if!defined(afx_resource_dll) defined(afx_targ_fin) #ifdef _WIN32 LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT #pragma code_page(1252) #endif _WIN32 / Dialog LASKURI DIALOG DISCARDABLE 17, 25, 180, 88 STYLE WS_MINIMIZEBOX WS_MAXIMIZEBOX WS_VISIBLE WS_CAPTION WS_SYSMENU WS_THICKFRAME CAPTION "LASKURIR" FONT 8, "MS Sans Serif" PUSHBUTTON "&Henkilöautoja",HA,33,10,50,20 PUSHBUTTON "&Kuorma-autoja",KA,100,10,50,20 RTEXT "0 ",HAL,31,40,50,10,WS_BORDER RTEXT "0 ",KAL,100,40,50,10,WS_BORDER PUSHBUTTON "&Nollaa",NOLLAA,50,60,80,20 PUSHBUTTON "e&xit",exit,0,0,24,14 1 TEXTINCLUDE DISCARDABLE "resource.h\0" 2 TEXTINCLUDE DISCARDABLE "#include ""afxres.h""\r\n" "\0" 3 TEXTINCLUDE DISCARDABLE "\r\n" "\0" #endif APSTUDIO_INVOKED #endif Finnish resources / #ifndef APSTUDIO_INVOKED / Generated from the TEXTINCLUDE 3 resource. / #endif not APSTUDIO_INVOKED / Accelerator PIKA ACCELERATORS MOVEABLE PURE "K", KA, ASCII "k", KA, ASCII "H", HA, ASCII "h", HA, ASCII "N", NOLLAA, ASCII "n", NOLLAA, ASCII "X", EXIT, ASCII "x", EXIT, ASCII #ifdef APSTUDIO_INVOKED / TEXTINCLUDE 1 of 2 3.6.2004 20:27 2 of 2 3.6.2004 20:27