Metoda rezlizująca ruch w prawo
Oto przykładowy fragment rozwiązania podanego zadania - metoda
realizująca ruch w prawo. Uwaga: część operacji można by
umieścić poza tą metodą (w metodzie inicjalizującej).
Poniższa metoda korzysta z globalnych zmiennych
ic_x i ic_y pamiętających bieżące położenie ludzika na ekranie
oraz zakłada, że stworzono dwie ikony o identyfikatorach
IDI_Puste i IDI_Robotnik.
void CMinuteDlg::OnPrzyciskPrawo()
{
// Obsługa przycisku przesuwającego w prawo
CDC* pDC; // bieżący kontekst
HICON h_ic; // uchwyt do ikonki
CRect rect; // prostokąt okna
CWinApp* cwinapp; // wskaźnik do obiektu aplikacji
int dx; // przesunięcie w poziomie
// Najpierw pobieramy dane
pDC = GetDC();
GetClientRect(&rect);
dx = GetSystemMetrics(SM_CXICON);
cwinapp = AfxGetApp();
// Teraz sprawdzam czy da się iść w prawo
if (ic_x + dx + dx < rect.Width())
{ // Można, więc idę
// Usuwam ludzika w starym miejscu
h_ic = cwinapp->LoadIcon(IDI_Puste);
pDC -> DrawIcon(ic_x, ic_y, h_ic);
// Uaktualniam współrzędne
ic_x+=dx;
// Rysuję w nowym
h_ic = cwinapp->LoadIcon(IDI_Robotnik);
pDC -> DrawIcon(ic_x, ic_y, h_ic);
}
else
{ // Nie można iść dalej w prawo, przesuwam do lewego skraju okna
MessageBox("Nie można iść dalej!");
Beep(600, 500); // Nie w każdej wersji Windows działa
// Kasuję w starym miejscu
h_ic = cwinapp->LoadIcon(IDI_Puste);
pDC -> DrawIcon(ic_x, ic_y, h_ic);
// Uaktualniam współrzędne
ic_x=0;
// I rysuję w nowym
h_ic = cwinapp->LoadIcon(IDI_Robotnik);
pDC -> DrawIcon(ic_x, ic_y, h_ic);
}
// Zwalniam kontekst
ReleaseDC(pDC);
}