/**************/ /* kolmiom.c */ /****************************************************************************/ /* ** Malliohjelma kauan kestävästä piirtämisestä. ** Tähän versioon on lisätty kolmionpiirto"silmukkaan" kutsu ** CheckMessage, joka mahdollistaa moniajon. ** ** Tehtäviä 1) Kokeile toimiiko muut ohjelmat nyt yhtäaikaisesti piirron ** kanssa. ** ** 2) Kokeile toimiiko ohjelman hiirellä piirtäminen kuvan ** uudelleen piirron kanssa yhtäaikaa. ** ** 3) Kirjoita ohjelma, joka "värittää" ikkunaan mustan neliön ** vetämällä siihen alekkaisia viivoja. ** Toimiiko moniajossa? ** ----------------------------------------------------------------------------*/ #include #include #include "checker.h" #include "kolmiom.h" #define PIENIN_KOLMIO 8 /* 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)); if ( CheckMessage() ) return; /* Tämä mahdollistaa "moniajon"!!!!!!!! */ MoveToEx(I(x,y),0); 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*/ } /****************************************************************************/ LONG MyDraw(HWND hWnd,HDC hDC) { kolmio(hDC,300,400,200); (void)hWnd; return 0; }