/******************************************************************************* Moduli: tyokal.cpp Tarkoitus: ...... Projekti: Winlin, Cum laude approbatur -harjoitustyö Tekijät: Virpi Kivinen & Tiina Mäkinen Tehty: 1.1.96 Muutettu 12.7.96 Mitä muutettu: + oma piirto pistepiirtoihin mukaan nappula muutettu omasta viivaksi Muutettu 14.7.96 Mitä muutettu: + Klikkausten lkm nollataan aina, kun pistepiirtoa vaihdetaan tai oma piirto valitaan. (Ei jää vanhoja pisteitä talteen.) Alkukuvaan ei jää näkyviin ylimääräisiä kuutioita,jos piirtoa vaihdetaan kesken kaiken, (W.otus tuhotaan aina). Vaihdettaessa omaan piirtoon sitä vastaava nappula jää pohjaan (kuten pistepiirroilla,WM_drawitem). Muutettu 18.7.96 Mitä muutettu: + W.edellinen Muutettu WM_lisaa viestin käsittelyä niin että tarvittavat muutokset W -tietueeseen tehdään jo nyt, eikä kuvaikkunan viesteissä. Kysy_paikka() siirretty tähän moduliin kuva.cpp:stä. Muutettu 20.7.96 Mitä muutettu: poistettu turhien viestien lähettelyä. Muutettu 1.8.96 Mitä muutettu: Viivan piirto otettu pois W.piirto-muuttujasta, jätetty vain 1, 2 ja 3 pisteen piirrot. Oma piirto kuin muutkin piirrettä- vät objektit. Muutettu 3.8.96 Mitä muutettu: WM_pistepiirrossa alustetaan piirtäminen alkutilannetta vastaa- vaksi aina (ei haittaa, jos piirtoa vaihdetaan kesken klikkaus- ten). W.kuka nollataan kun tulee piirtopyyntöjä joita ei esim liian pienen dimension vuoksi haluta tehdä. Muutettu 4.8.96 Mitä muutettu: Piirrettävän objektin nappula alhaalla kuten pistepiirroissa. Väri vaihtuu nyt myös väri-ikkunaa klikkaamalla. Muutettu 7.8.96 Mitä muutettu: Paikanneuvomisviestit pois. Puutteet: ? Aliohjelmat: ============ static LONG WM_command_kierto(tMSGParam *msg) -Lähettää nyt KIERTO-viestin aina Kuvalle!!! Pitää keksiä , miten voi valita aktiivisen ikkunan. static LONG WM_lisaa(tMSGParam *msg) -W.kuka:aan mikä kuva piirretään static LONG WM_lopeta(tMSGParam *msg) -Lähettää LOPETA-viestin pääikkunalle. static LONG WM_kuvaa(tMSGParam *msg) -Lähettää IDOK-viestin (ret) Matriisille --->Kuva piirretään. static LONG WM_command_poista(tMSGParam *msg) -Lahettaa viestin jolla tietorakenne tyhjennetään (kummallekin cMuunnettuIkkunalle) static LONG WM_drawitem(tMSGParam *msg) -Piirretään nappuloihin bittikartat /******************************************************************************/ #include #include #include"kahvat.h" #include"mdialog.h" #include"tabhand.h" #include"winlin.h" #include"tausta.h" tNappi Napit[MAX_NAPPEJA] = { {"KUUTIO1","KUUTIO2"},{"ELLIPSI1","ELLIPSI2"},{"PARAAB1","PARAAB2"},{"ZSPIR1","ZSPIR2"},{"YSPIR1","YSPIR2"}, {"KOLMIO1","KOLMIO2"},{"MOKKI1","MOKKI2"},{"VIIVA","VIIVA2"},{"PISTE1","PISTE12"},{"PISTE2","PISTE22"},{"PISTE3","PISTE32"},{"???"}, {"???"},{"???"},{"XKIERTO1","XKIERTO2"},{"YKIERTO1","YKIERTO2"},{"ZKIERTO1","ZKIERTO2"},{"???"},{"???"}, {"???"},{"???"},{"ZOOMOUT","ZOOMOUT2"},{"ZOOMIN","ZOOMIN2"},{"???"},{"I_MATRIX1","I_MATRIX2"} }; //ei mustaa tVarit Variruudut[VAREJA-1] = { {"VIHREA"},{"PUNAINEN"},{"VIOLETTI"},{"KELTAINEN"},{"SININEN"},{"TURKOOSI"},{"VALKOINEN"},{"TVIHREA"} }; //Tuhotaan winlin.cpp:ssä,koska ei saanut täällä wm_close -viestiä ?! static LONG WM_lisaa(tMSGParam *msg) { //y-spiraalia ja paraabelia ei tehdä kolmella pisteellä ollenkaan, y-spiraali vasta kun 4x4-matriisi if (W.piirto==3&&(msg->id==YSPIR||msg->id==PARAAB)||W.dimensio<=3&&msg->id==YSPIR ) { //3.8. return 0; } //18.07 else { W.kuka=msg->id; // asetetaan piirrettäväksi klikattu objekti //4.8. InvalidateRect(msg->hWnd,NULL,TRUE); } return 0; } static LONG WM_lopeta(tMSGParam *msg) { LAHETA_VIESTI(W.Hwndt[0],msg->id); return 0; } static LONG WM_kuvaa(tMSGParam *msg) { (void)msg; LAHETA_VIESTI(W.Hwndt[1],IDOK); return 0; } static LONG WM_command_i_matr(tMSGParam *msg) { LAHETA_VIESTI(W.Hwndt[1],msg->id); return 0; } static LONG WM_command_poista(tMSGParam *msg) { (void)msg; //varulta molemmille LAHETA_VIESTI(ikkunat.etsi_kahva(0),msg->id); LAHETA_VIESTI(ikkunat.etsi_kahva(1),msg->id); return 0; } // seuraava aina aktiiviselle ikkunalle static LONG WM_command_toimi(tMSGParam *msg) { HWND h=ikkunat.anna_aktiivinen(); LAHETA_VIESTI(h,msg->id); //(0) !!! return 0; } static LONG WM_initdialog(tMSGParam *msg) { int i; HINSTANCE h = GetWindowInstance(msg->hWnd); for (i=0; ilParam; HBITMAP bm; if ( dis->CtlID == VARI) { HMENU hmenu = GetMenu(W.Hwndt[0]); int i = mika_vari_valittuna(hmenu); //0-7 //4.8. if (dis->itemAction == ODA_SELECT && (dis->itemState & ODS_SELECTED) ) { CheckMenuItem(hmenu,CM_VIHREA+i,MF_BYCOMMAND|MF_UNCHECKED); if (i==7) i=0; else i++; CheckMenuItem(hmenu,CM_VIHREA+i,MF_BYCOMMAND|MF_CHECKED); } bm = Variruudut[i].hBitMap; PiirraBittikartta(dis->hDC,bm,0,0); return 0; } if ( dis->itemAction == ODA_SELECT && ( dis->itemState & ODS_SELECTED ) ){ bm = Napit[dis->CtlID - ISO_NAPPI].hBitMap2; PiirraBittikartta(dis->hDC,bm,0,0); } else { bm = Napit[dis->CtlID - ISO_NAPPI].hBitMap1; PiirraBittikartta(dis->hDC,bm,0,0); } if (YKSIP<=dis->CtlID&&dis->CtlID<=KOLMEP) { //18.07 if (dis->CtlID==YKSIP&&W.piirto==1) { bm = Napit[YKSIP-ISO_NAPPI].hBitMap2; PiirraBittikartta(dis->hDC,bm,0,0); } else if (dis->CtlID==KAKSIP&&W.piirto==2){ bm = Napit[KAKSIP-ISO_NAPPI].hBitMap2; PiirraBittikartta(dis->hDC,bm,0,0); } else if (dis->CtlID==KOLMEP&&W.piirto==3){ bm = Napit[KOLMEP-ISO_NAPPI].hBitMap2; PiirraBittikartta(dis->hDC,bm,0,0); } } if (KUUTIO<=dis->CtlID&&dis->CtlID<=OMA) { //4.8 if (dis->CtlID==KUUTIO&&W.kuka==KUUTIO) { bm = Napit[KUUTIO-ISO_NAPPI].hBitMap2; PiirraBittikartta(dis->hDC,bm,0,0); } if (dis->CtlID==ELLIPSI&&W.kuka==ELLIPSI) { bm = Napit[ELLIPSI-ISO_NAPPI].hBitMap2; PiirraBittikartta(dis->hDC,bm,0,0); } if (dis->CtlID==PARAAB&&W.kuka==PARAAB) { bm = Napit[PARAAB-ISO_NAPPI].hBitMap2; PiirraBittikartta(dis->hDC,bm,0,0); } if (dis->CtlID==ZSPIR&&W.kuka==ZSPIR) { bm = Napit[ZSPIR-ISO_NAPPI].hBitMap2; PiirraBittikartta(dis->hDC,bm,0,0); } if (dis->CtlID==YSPIR&&W.kuka==YSPIR) { bm = Napit[YSPIR-ISO_NAPPI].hBitMap2; PiirraBittikartta(dis->hDC,bm,0,0); } if (dis->CtlID==KOLMIO&&W.kuka==KOLMIO) { bm = Napit[KOLMIO-ISO_NAPPI].hBitMap2; PiirraBittikartta(dis->hDC,bm,0,0); } if (dis->CtlID==MOKKI&&W.kuka==MOKKI) { bm = Napit[MOKKI-ISO_NAPPI].hBitMap2; PiirraBittikartta(dis->hDC,bm,0,0); } if (dis->CtlID==OMA&&W.kuka==OMA) { bm = Napit[OMA-ISO_NAPPI].hBitMap2; PiirraBittikartta(dis->hDC,bm,0,0); } } return 0; } static LONG WM_command_laskin(tMSGParam *msg) { (void)msg; WinExec("calc",SW_SHOW); return 0; } static LONG WM_pistepiirto(tMSGParam *msg) { //18.07 // W.edellinen=W.piirto;//viivan piirto sama riippumatta pistepiirroista switch (msg->id){ case YKSIP: W.piirto=1; break; case KAKSIP: W.piirto=2; break; case KOLMEP: W.piirto=3; if (W.kuka==PARAAB||W.kuka==YSPIR) W.kuka=KUUTIO; //14.8. break; } //14.07 if (!(W.otus==NULL)){ cMuunnettuIkkuna *I=ikkunat.etsi(ikkunat.etsi_kahva(0)); W.otus->PiirraPois(*I); delete W.otus; W.otus=NULL; } W.lkm = 0; //3.8. W.drag_draw=0; W.sijoitus=ISO_LUKU; W.leveys=ISO_LUKU; InvalidateRect(msg->hWnd,NULL,TRUE); return 0; } static LONG WM_command_dim(tMSGParam *msg) { //14.8. switch (msg->id) { case CM_2D: if (W.kuka==YSPIR) W.kuka=KUUTIO; break; case CM_3D: if (W.kuka==YSPIR) W.kuka=KUUTIO; break; case CM_4D: break; } InvalidateRect(msg->hWnd,NULL,TRUE); return 0; } static LONG WM_command_muutavari(tMSGParam *msg) { InvalidateRect(msg->hWnd,NULL,TRUE); return 0; } tMSGEntry TkTbl[] = { { WM_INITDIALOG, DoC , DoC, WM_initdialog ,0 }, { WM_COMMAND , MUUTA_VARI, DoC, WM_command_muutavari,0 }, { WM_DRAWITEM , DoC , DoC, WM_drawitem ,0 }, { WM_COMMAND , LOPETA , DoC, WM_lopeta ,0 }, { WM_COMMAND , KUVAA , DoC, WM_kuvaa ,0 }, { WM_COMMAND , POISTA , DoC, WM_command_poista ,0 }, { WM_COMMAND , TRANGE , DoC, WM_lisaa ,0,0,KUUTIO,OMA }, { WM_COMMAND , TRANGE , DoC, WM_pistepiirto ,0,0,YKSIP,KOLMEP }, { WM_COMMAND , TRANGE , DoC, WM_command_toimi ,0,0,X_KIERTO,ZOOM_BACK}, { WM_COMMAND , TRANGE , DoC, WM_command_dim ,0,0,CM_2D,CM_4D }, { WM_COMMAND , I_MATR , DoC, WM_command_i_matr ,0 }, { WM_COMMAND , LASKIN , DoC, WM_command_laskin ,0 }, { 0 } };