/******************************************************************************* Moduli: kahvat.cpp Tarkoitus: Luokka, johon talletetaan cMuunnettuIkkunat eli alkukuva- ja kuvaikkunat. Projekti: Winlin, Cum laude approbatur -harjoitustyö Tekijät: Virpi Kivinen & Tiina Mäkinen Tehty: 1.1.96 Muutettu 1.7.96 Mitä muutettu: + lisättyyt Muutettu 22.8.96 Mitä muutettu: + Aseta_aktiivinen(), anna_aktiivinen() Puutteet: mökki cKahvat-luokan metodit: - cMuunnettuIkkuna *etsi(HWND hwnd) Palauttaa osoitintaulukosta annettua kahvaa vastaavan osoittimen ikkunaan. - HWND etsi_kahva(int kahva) Palauttaa taulukosta parametrina tuodussa paikassa olevan ikkunan kahvan. - int kopioi_taulukko(cKahvat &kahva) - cKahvat &operator=(cKahvat &kahva) - cMuunnettuIkkuna *ensimmainen(void) - cMuunnettuIkkuna *seuraava(void) - int lisaa(HWND h, HINSTANCE i,int paikka,char *otsikko,char *luokka,WNDPROC KuvaWndProc) Luo pääikkunaan DoClassWindowCmd -aliohjelmalla lapsi_ikkunoita. Parametrina tuodaan pääikkuna h, sen esiintymä i, taulukon paikka, ikkunan otsikko, luokka ja käsittelijäfunktio, jotka välitetään edelleen DoClassWindowCmd aliohjelmalle. Tallettaa DoClassWindowCmd:n palauttaman ikkunan kahvan paikkaan Paikka taulukossa HWND Hwndt[]. Varaa new:llä uuden cMuunettuIkkuna:n,jolle annetaan luotaessa juuri edellä saatu kahva. Saatu osoitin sijoitetaan cMuuunnettuIkkuna *Ikkunat[] -osoitintaulukkoon. - int muuta_koko(HWND hWnd) Kutsuu silmukassa muuta_lapset aliohjelmaa, hWnd ---> isahwnd , Kahvat[i] --->lapsihwnd. - int tuhoa(void) Tuhoaa new:llä luodut cMuunnettuIkkunat silmukassa. Nollaa samalla ikkunoiden kahvat. - int Aseta_aktiivinen(HWND h) Laittaa aktiiviseksi ikkunan, jolla on sama kahva kuin parametrina tuotu h. - HWND anna_aktiivinen(void) Palauttaa aktiivisena olevan ikkunan kahvan. Muut aliohjelmat: - static LONG muuta_lapset(HWND isahwnd,HWND lapsihwnd,int kuka) Muuttaa pääikkunan (Lineaarikuvaus) lapsi-ikkunat oikeaan kokoon suhteessa pääikkunaan. **************************************************************************/ #include #include #include"kahvat.h" #include"mdialog.h" #include"tabhand.h" #include"winlin.h" cMuunnettuIkkuna *cKahvat::etsi(HWND hwnd) { int i; HWND h; for (i=0;iKahva(); if (h == hwnd) return Ikkunat[i]; } return NULL; } HWND cKahvat::etsi_kahva(int paikka) { if (paikka<0||lkm<=paikka) return Kahvat[0]; return Kahvat[paikka]; } int cKahvat::kopioi_taulukko(cKahvat &kahva) { int i; cMuunnettuIkkuna *p; tuhoa(); lkm=kahva.lkm; for (i=0; i=MAX_IKKUNOITA-1) return 1; Kahvat[paikka]=DoClassWindowCmd(i,luokka,0,h,otsikko,KuvaWndProc, WS_CAPTION | WS_THICKFRAME | WS_CHILD | WS_CLIPSIBLINGS , SW_SHOW,SetAlkuwc); muuta_lapset(h,Kahvat[paikka],paikka); Ikkunat[paikka]=new cMuunnettuIkkuna(a,Kahvat[paikka],paikka); lkm++; Ikkunat[lkm]=NULL; return 0; } int cKahvat::muuta_koko(HWND hWnd) //lasten koko aina suhteessa pääikkunaan { int i; for (i=0; iKahva(),s,15); if(Ikkunat[i]->Kahva()==h) { if(s[0]!='x') s[0]='x'; Ikkunat[i]->aseta_aktiivinen(1); } else { if(s[0]!=' ') s[0]=' '; Ikkunat[i]->aseta_aktiivinen(0); } for(j=0;jKahva(),apu); } return 0; } HWND cKahvat::anna_aktiivinen(void) { int i; for(i=0;iAktiivinen()) return Ikkunat[i]->Kahva(); } return NULL; }