150 likes | 274 Views
S veučilište u Z agrebu PMF – Matematički odjel. Objektno programiranje (C++). Vježbe 09 – MFC Windows forme. Vinko Petričević. Kreiranje forme. Prilikom kreiranje prozora, prozor dobiva prozor dobiva poruku WM_CREATE na kojem je moguće postaviti neka inicijalizacijska svojstva
E N D
Sveučilišteu Zagrebu PMF – Matematički odjel Objektno programiranje (C++) Vježbe 09 – MFC Windows forme Vinko Petričević
Kreiranje forme • Prilikom kreiranje prozora, prozor dobiva prozor dobiva poruku WM_CREATE na kojem je moguće postaviti neka inicijalizacijska svojstva • ako radimo s dijalogom (klasa je naslijeđena iz CDialog), potrebno je preraditi metodu OnInitDialog(). • Npr, možemo naredbom MoveWindow postaviti drugačiju poziciju prozora: • CRect myRect;// GetClientRect(&myRect);GetWindowRect(&myRect);// ClientToScreen(myRect);MoveWindow(100,200, myRect.Width(), myRect.Height());
Kreiranje forme • SetWindowText mijenja naziv prozora • micanje prozora:CRect myRect;// GetClientRect(&myRect);GetWindowRect(&myRect);// ClientToScreen(myRect);MoveWindow(100,200, myRect.Width(), myRect.Height()); • mijenjanje stila prozora:ModifyStyle
Zadatak 1 • Napravite program koji ima 1 formu. • forma treba biti na poziciji (100,100), te treba imati check-box pomoću kojeg je moguće omogućiti unos teksta u edit kontroli koja mijenja naslov programa
CWnd • bazna klasa za rad s prozorima • GetDlgItem – daje pokazivač na element dijaloga • Create – kreira prozor • ShowWindow – prizkazuje/skriva određeni element • EnableWindow – o(ne)mogućuje rad s prozorom • IsDlgButtonChecked – provjerava stanje chechbuttonCheckDlgButton – mijenja njegovo stanje • možemo i elementu dijaloga pridijeliti varijablu, kontrolnu ili vrijednosnu
Zadatak 2 • Napravite program koji ima 1 formu. • forma treba imati checkBox pomoću kojeg je moguće promijeniti vidljivost (ShowWindow) i dostupnost (EnableWindow) jednog gumba na formi. Forma treba imati i 2 radiobuttona pomoću kojeg je moguće odabrati koju stvar mijenjamo
Kreiranje forme • novu formu kreiramo naredbom DoModal ili (nakon Create) ShowWindow • CFrameWnd w; w.Create(0, "naslov“, WS_VISIBLE| WS_CAPTION|…); w.ShowWindow(SW_NORMAL);
Zadatak 3 • Napravite program koji ima 2 forme. Na prvoj formi trebaju biti 3 gumba. Klikom na prvi treba završiti izvršavanje programa, a klikom na drugi treba prikazati drugu formu u obliku dialoga • Na drugom dijalogu treba biti samo ispisano trenutno vrijeme. • Neka ima i još jednu formu, koja se jednako ponaša, samo neka bude podignuta ShowWindow naredbom i izvedena iz CFrameWnd (i ima jedan element CStatic)
Kreiranje forme • OnShowWindow • OnActivateWindow • OnPaint
Zadatak 4 • Napravite program koji ima 2 prozora • u prvom neka bude edit kontrola u koju unosimo boju • drugi neka ima četverokut te boje (Rectangle, CPen) • neka stanje aktiviranosti bude u naslovu: • switch( nState ) {case WA_ACTIVE: SetWindowText(“Aktiviran bez miša"); break; case WA_INACTIVE: SetWindowText(“Deaktiviran"); break; case WA_CLICKACTIVE: SetWindowText(“Aktiviran mišem"); break; }
Zadatak 5 • Napišite program koji ima gumb O meni, te izbornik, sa istom stavkom. • Klikom na taj gub otvara se dijalog sa nekom vlastitom slikom
Zadatak 6 • Napišite program koji ima gumb Dodaj, koji se nalazi u donjem desnom dijelu forme, te se pomiče zajedno s njim prilikom resizanja forme. Pilikom klika na njega, na formu dodaje novi gumb na poziciji 200,200
Zadatak 7 • Napišite program koji prilikom klika miša u aslovu ispisuje poziciju miša, dok je miš stisnut takođe se ispisuje pozicija, sve dok ne pustimo gumb
WM_CLOSE • poziva se prilikom pokušaja zatvaranja prozora • obrađuje ju metoda OnClose. Na njoj možemo provjeriti želi li korisnik stvarno zatvoriti prozor, te ako želo, pozovemo metodu OnClose bazne klase • nakon zatvaranja poziva se WM_DESTROY koji poziva OnDestroy, koja uništava sam prozor
Zadatak 8 • Napravite dijalog koji prilikom kreiranja postavi MessageBox s pitanjem želite li spremiti, Yes No Cancel. Prilikom odabira Yes, podiže messageBox s natpisom Spremanje te zatvara formu, prilikom No samo zatvara formu, a prilikom Cancel odustaje od zatvaranja dijaloga.