#include #include #include #include #include #include"tabhand.h" #include"mdialog.h" #include"winlin.h" #include"tietorak.h" #define LAHETA_VIESTI(ikkuna,tunniste) SEND_WM_COMMAND(ikkuna,tunniste,0,0); /*PROJEKTIIN:ALI\tabhand.c,ALI\mdialog.c, winlin.rc, winlin.cpp, vektorit.cpp, */ /* matriisi.cpp, piirrot.cpp, muunnik.cpp, tietorak.cpp, winlin.def */ HWND MathWnd; TDIALOGPROC(MatTbl,OurDlgProc) TDIALOGPROC(MsgTbl,AkDlgProc) TblClassDlgMAIN("cVecClass",0,"PIKA","KIERTO",MsgTbl) cVarit color; cOtukset Otukset; cMatrix Glo,apu; #if 1 #define MAX_IKKUNOITA 5 class cKahvat{ HWND Kahvat[MAX_IKKUNOITA]; cMuunnettuIkkuna *Ikkunat[MAX_IKKUNOITA]; int lkm; public: cKahvat(cKahvat &kahva){ lkm=0; kopioi_taulukko(kahva); } cKahvat(){Kahvat[0]=0; Ikkunat[0]=NULL; lkm=0;} ~cKahvat(){tuhoa();} cKahvat &operator=(cKahvat &kahva); int lisaa(cMuunnettuIkkuna *I); int tuhoa(void); cMuunnettuIkkuna *ensimmainen(void); cMuunnettuIkkuna *seuraava(void); int kopioi_taulukko(cKahvat &kahva); }; int cKahvat::kopioi_taulukko(cKahvat &kahva) { int i; cMuunnettuIkkuna *p; tuhoa(); lkm=kahva.lkm; for (i=0; i=MAX_IKKUNOITA-1) return 1; Ikkunat[lkm]=I; Kahvat[lkm]=I->Kahva(); lkm++; Ikkunat[lkm]=NULL; return 0; } int cKahvat::tuhoa(void) { int i; for (i=0;ihDC,msg->hWnd,Glo); B=Ikkuna->muunna(Glo); Ikkuna->koordinaatisto(cVec(0,0,0),0,color[7]); Ikkuna->koordinaatisto(cVec(0,0,0),1,color[7]); Ikkuna->koordinaatisto(cVec(0,0,0),2); Ikkuna->palauta(B); A=Ikkuna->muunna(apu); Otus=Otukset.eka_otus(); while(Otus){ Ikkuna->luo_kyna(Otus->vari); Otus->piirra(*Ikkuna); Ikkuna->poista_kyna(); Otus = Otukset.seuraava_otus(); } Ikkuna->palauta(A); Ikkuna=ikkunat.seuraava(); } return 0; } static LONG WM_initdialog(tMSGParam *msg) { // MoveWindow(msg->hWnd,10,10,400,400,TRUE); #if 1 // cMuunnettuIkkuna alkukuva(msg->hDC,DoModelessDialog(msg->hWnd,"ALKUDLG",AkDlgProc)); ikkunat.lisaa(new cMuunnettuIkkuna(msg->hDC,DoModelessDialog(msg->hWnd,"ALKUDLG",AkDlgProc))); #endif MathWnd=DoModelessDialog(msg->hWnd,"MATDLG",OurDlgProc); return 0; } static LONG MySize(tMSGParam *msg) { InvalidateRect(msg->hWnd,NULL,TRUE); return 0; } int aseta_kulma(int ax) { cMatrix R; switch (ax) { case X_KIERTO: R.kierto(KULMA,1); Glo *= R; break; case Y_KIERTO: R.kierto(KULMA,2); Glo *= R; break; case Z_KIERTO: R.kierto(KULMA,3); Glo *= R; break; case X_NEG: R.kierto(-KULMA,1);Glo *= R; break; case Y_NEG: R.kierto(-KULMA,2);Glo *= R; break; case Z_NEG: R.kierto(-KULMA,3);Glo *= R; break; } return 0; } static LONG WM_command_kierto(tMSGParam *msg) { aseta_kulma(msg->id); InvalidateRect(msg->hWnd,NULL,TRUE); return 0; } int tee_otus(int kuka,HWND mihin) { int virhe=0; switch (kuka) { case PALLO: virhe=Otukset.lisaa(new cEllipsi()); break; case KUUTIO: virhe=Otukset.lisaa(new cKuutio()); break; case PARAAB: virhe=Otukset.lisaa(new cParaabeli()); break; case YSPIR: virhe=Otukset.lisaa(new cYspiraali()); break; case ZSPIR: virhe=Otukset.lisaa(new cZspiraali(color[5],2.0,cVec(-5,-2,3),0.7));break; case ELLIPSI: virhe=Otukset.lisaa(new cEllipsi(color[1],2.0,cVec(-5,-2,3),0.3)); break; } if (virhe){ MessageBeep(MB_OK); MessageBox(mihin,"Nyt ei saa enää piirtää!!!","Lineaarikuvaus",MB_APPLMODAL|MB_OK); } return 0; } static LONG WM_command_lisaa_pallo(tMSGParam *msg) { tee_otus(msg->id,msg->hWnd); InvalidateRect(msg->hWnd,NULL,TRUE); return 0; } static LONG WM_command_lopeta(tMSGParam *msg) { FreeAllModeless(); DestroyDialog(msg->hWnd,0); PostQuitMessage(0); return 0; } tMSGEntry MsgTbl[] = { { WM_CLOSE , DoC , DoC, WM_command_lopeta ,0 }, { WM_PAINT , DoC , DoC, MyDraw ,0 }, //1! { WM_SIZE , DoC , DoC, MySize ,0 }, { WM_INITDIALOG, DoC , DoC, WM_initdialog ,1 }, { WM_COMMAND , TRANGE , DoC, WM_command_kierto ,0,0,X_KIERTO,Z_NEG }, { WM_COMMAND , LOPETA , DoC, WM_command_lopeta ,0 }, { WM_COMMAND , TRANGE , DoC, WM_command_lisaa_pallo ,0,0,PALLO,ELLIPSI }, { 0 } }; static LONG WM_command_NAPSI_LUVUT(tMSGParam *msg) { char s[10]; GetDlgItemText(msg->hWnd,IDC_EDIT4,s,sizeof(s)); if (sscanf(s,"%lf",&apu[0][0])!=1) { SetDlgItemInt(msg->hWnd,IDC_EDIT4,0,TRUE); apu[0][0]=1.0; } GetDlgItemText(msg->hWnd,IDC_EDIT1,s,sizeof(s)); if (sscanf(s,"%lf",&apu[0][1])!=1) { SetDlgItemInt(msg->hWnd,IDC_EDIT1,0,TRUE); apu[0][1]=0.0; } GetDlgItemText(msg->hWnd,IDC_EDIT2,s,sizeof(s)); if (sscanf(s,"%lf",&apu[1][0])!=1) { SetDlgItemInt(msg->hWnd,IDC_EDIT2,0,TRUE); apu[1][0]=0.0; } GetDlgItemText(msg->hWnd,IDC_EDIT3,s,sizeof(s)); if (sscanf(s,"%lf",&apu[1][1])!=1) { SetDlgItemInt(msg->hWnd,IDC_EDIT3,0,TRUE); apu[1][1]=1.0; } return 0; } #if 1 tMSGEntry MatTbl[] = { { WM_COMMAND , IDOK , DoC , WM_command_NAPSI_LUVUT }, // { WM_COMMAND , IDOK , DoC , WM_idok }, { 0 } }; #endif