Pisze proste menu w c++. Wyświetlają się trzy przyciski. Funkcja ma zwrócić nr naciśniętego przycisku.
Funkcja main():
int main()
{
allegro_init();
install_mouse();
set_color_depth(32);
set_gfx_mode(GFX_AUTODETECT_FULLSCREEN,800,600,0,0);
// Wskaźniki
BITMAP *bufor = create_bitmap(800,600);
int a = menu(bufor);
destroy_bitmap(bufor);
allegro_exit();
return 0;
}
END_OF_MAIN();
Funkcja wyświetlająca przyciski i zwracająca nr przycisku:
int menu(BITMAP *buf)
{
BITMAP *grafika = load_bmp("menu.bmp",default_palette);
int wybor = 0;
while(wybor <= 0)
{
//WYSWIETLENIE POCZATKOWE
for(int i=0; i<3; i++)
masked_blit(grafika, buf, 0, 52*1, 300, 172 + 50*i + 52*i, 186, 52);
//GDY KURSOR MYSZKI ZNAJDUJE SIE NAD PIERWSZYM PRZYCISKIEM
if((mouse_x >= 300) && (mouse_x <= 300 + 186) && (mouse_y >= 172) && (mouse_y <= 172 + 52))
{
masked_blit(grafika, buf, 0, 52*0, 300, 172 + 50*0 + 52*0, 186, 52);
if(mouse_b==1)
{
masked_blit(grafika, buf, 0, 52*2, 300, 172 + 50*0 + 52*0, 186, 52);
wybor = 1;
}
}
//GDY KURSOR MYSZKI ZNAJDUJE SIE NAD DRUGIM PRZYCISKIEM
else if((mouse_x >= 300) && (mouse_x <= 300 + 186) && (mouse_y >= 172 + 50*1 + 52*1 ) && (mouse_y <= 172 + 50*2 + 52*2))
{
masked_blit(grafika, buf, 0, 52*0, 300, 172 + 50*1 + 52*1, 186, 52);
if(mouse_b==1)
{
masked_blit(grafika, buf, 0, 52*2, 300, 172 + 50*1 + 52*1, 186, 52);
wybor = 2;
}
}
//GDY KURSOR MYSZKI ZNAJDUJE SIE NAD TRZECIM PRZYCISKIEM
else if((mouse_x >= 300) && (mouse_x <= 300 + 186) && (mouse_y >= 172 + 50*2 + 52*2) && (mouse_y <= 172 + 50*2 + 52*2 + 52))
{
masked_blit(grafika, buf, 0, 52*0, 300, 172 + 50*2 + 52*2, 186, 52);
if(mouse_b==1)
{
masked_blit(grafika, buf, 0, 52*2, 300, 172 + 50*2 + 52*2, 186, 52);
wybor = 3;
}
}
show_mouse(buf);
blit(buf, screen, 0,0,0,0, 800, 600);
clear_to_color(buf, makecol(0,0,0));
}//KONIEC:while(wybor == 0)
scare_mouse();
destroy_bitmap(grafika);
return wybor;
}
Menu wyświetla się dobrze. Przyciski działają dobrze (tzn ze najeżdżam na przyciski to staja się aktywne i gdy kliknę lewym przyciskiem myszki to przycisk się naciska).
Funkcja zwraca dobry wynik ale zaraz po tym wyskakuje okno:
"Wystąpił problem z aplikacją TestAllegro.exe i zostanie ona zamknięta. Przepraszamy za kłopoty."
Co jest tego powodem ?? Czyżbym zapomniał zwolnić gdzieś pamięci??
Zauważyłem że okno pojawia się przy instrukcji: "destroy_bitmap(bufor);"

Zaloguj się
Rejestracja
Pomoc

















