Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
24
NowoczesnyOpenGL
funkcjiCreateWindowEx).Pozostajezatemutworzyćoknoipokazaćjenaekranie
(funkcjaShowWindow).Tworzącokno,możnaokreślićjegowłaściwościdodatkowe.
WparametrzedwStylefunkcjiCreateWindownależypodaćwartośćWS_OVER-
LAPPEDWINDOW.DziękitemuoknozyskawyglądtypowegooknaWindows(pasek
tytułu,obramowanie,ikonymaksymalizacjiiminimalizacji).
Zwróćmywreszcieuwagęnapętlęwhile,widocznąwfunkcjiskładowej
Okno::Uruchom.Tobardzoważnaczęśćkodu,tzw.pętlagłównaaplikacji,od-
powiedzialnazaodbióriprzekazywaniekomunikatówadresowanychdoaplika-
cji.FunkcjaGetMessageodbierającakomunikatyzwracaniezerowąwartośćdla
wszystkichkomunikatówpozaWM_QUIT.Wefekcieodebranietegoostatniego
spowodujezakończeniedziałaniaaplikacji.Wpunkcie16zadbaliśmy,abytaki
komunikatzostałprzesłanydoaplikacjiwmomenciezamknięciaokna.
DlawygodyzdefiniujmyjeszczedwachronionepolaklasyOknoprzecho-
wująceinformacjeowielkościobszaruużytkownika,tj.obszarudostępnegodo
rysowania(częśćobecniepusta).Właśniewnimbędziemywyświetlaćgrafikę3D.
1.WklasieOkno(plikOpenGL.h)zdefiniujmydwachronionepolaonazwach
szerokośćObszaruUżytkownikaiwysokośćObszaruUżytkownika,obatypu
long.
2.NastępniedofunkcjiskładowejOkno::WndProc(plikOpenGL.cpp)dodaj-
mysekcjęcase,odpowiedzialnązaaktualizacjęwartościtychpólwraziezmiany
rozmiaruokna(listing1.11):
Listing1.11.Aktualizacjapólprzechowującychrozmiarobszaruoknadostępnego
dlaprogramisty
LRESULTOkno::WndProc(HWNDhWnd,UINTmessage,
WPARAMwParam,
LPARAMlParam)
{
switch(message)
{
caseWM_DESTROY://zamykanieokna=>kończenieaplikacji
PostQuitMessage(0);
break;
caseWM_SIZE://Zmianarozmiaruokna
RECTrect;
GetClientRect(hWnd,&rect);
szerokośćObszaruUżytkownika=rectiright-rectileft;
wysokośćObszaruUżytkownika=rectibottom-rectitop;
break;
default://automatyczneprzetwarzaniekomunikatów
return(DefWindowProc(hWnd,message,wParam,lParam));
}
return0L;
}