Gronek8624 Temat założony przez niniejszego użytkownika |
[Allegro, C++] Rozwijane menu z listą przycisków » 2010-07-06 22:41:50 Witam Mam zamiar zrobić przycisk po którym rozwinie się reszta przycisków Lecz utknąłem przy próbie wyświetleniu listy przycisków Z góry dziękuje za pomoc A to jest kod : #include <allegro.h>
BITMAP * bufor = NULL; BITMAP * gui = NULL; BITMAP * przycisk = NULL; BITMAP * przycisk2 = NULL; class pozycje { public: int x; int y; };
int main() { allegro_init(); install_keyboard(); install_mouse(); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 500, 150, 0, 0 ); pozycje przyciska; przyciska.x = 3, przyciska.y = 0; bufor = create_bitmap( 500, 150 ); gui = create_bitmap( 500, 30 ); przycisk = create_bitmap( 100, 30 ); przycisk2 = create_bitmap( 100, 30 ); clear_to_color( bufor, makecol( 150, 150, 150 ) ); clear_to_color( gui, makecol( 100, 100, 100 ) ); clear_to_color( przycisk, makecol( 10, 100, 70 ) ); clear_to_color( przycisk2, makecol( 255, 0, 0 ) ); while( !key[ KEY_ESC ] ) { clear_to_color( bufor, makecol( 150, 150, 150 ) ); textprintf_ex( bufor, font, 20, 40, makecol( 30, 200, 30 ), - 1, "Myszka x = %d, y = %d, klawisz = %d !", mouse_x, mouse_y, mouse_b ); if( mouse_x > przyciska.x && mouse_x < przyciska.x + przycisk->w && mouse_b > przyciska.y && mouse_y < przyciska.y + przycisk->h ) { masked_blit( przycisk2, bufor, 0, 0, 30, 0, przycisk2->w, przycisk2->h ); } masked_blit( gui, bufor, 0, 0, 0, 0, 500, 150 ); masked_blit( przycisk, bufor, 0, 0, przyciska.x, przyciska.y, przycisk->w, przycisk->h ); textout_ex( bufor, font, "plik", 20 + przyciska.x, 10 + przyciska.y, makecol( 170, 30, 70 ), - 1 ); show_mouse( bufor ); blit( bufor, screen, 0, 0, 0, 0, 500, 150 ); } allegro_exit(); return( 0 ); } END_OF_MAIN();
|
|
Bartaz |
... » 2010-07-06 23:07:02 Mam zamiar zrobić przycisk po którym rozwinie się reszta przycisków Lecz utknąłem przy próbie wyświetleniu listy przycisków |
To zdanie mnie rozwalilo xD bo wlascieiwe to utknoles nie zaczynajac xD Ten kod to jest twoj w calosci? |
|
Gronek8624 Temat założony przez niniejszego użytkownika |
» 2010-07-07 12:57:08 Znalazłem go na necie ale trochę go zmodyfikowałem
|
|
malan |
» 2010-07-07 22:39:23 #include <allegro.h>
BITMAP * bufor = NULL; BITMAP * gui = NULL; BITMAP * przycisk = NULL; BITMAP * przycisk2 = NULL;
struct pozycje { int x; int y; };
int main() { allegro_init(); install_keyboard(); install_mouse(); set_gfx_mode( GFX_AUTODETECT_WINDOWED, 500, 150, 0, 0 ); pozycje przyciska; przyciska.x = 3; przyciska.y = 0; bufor = create_bitmap( 500, 150 ); gui = create_bitmap( 500, 30 ); przycisk = create_bitmap( 100, 30 ); przycisk2 = create_bitmap( 100, 30 ); clear_to_color( bufor, makecol( 150, 150, 150 ) ); clear_to_color( gui, makecol( 100, 100, 100 ) ); clear_to_color( przycisk, makecol( 10, 100, 70 ) ); clear_to_color( przycisk2, makecol( 255, 0, 0 ) ); while( !key[ KEY_ESC ] ) { clear_to_color( bufor, makecol( 150, 150, 150 ) ); masked_blit( gui, bufor, 0, 0, 0, 0, 500, 150 ); masked_blit( przycisk, bufor, 0, 0, przyciska.x, przyciska.y, przycisk->w, przycisk->h ); textout_ex( bufor, font, "Plik", 20 + przyciska.x, 10 + przyciska.y, makecol( 170, 30, 70 ), - 1 ); if( mouse_x > przyciska.x && mouse_x < przyciska.x + przycisk->w && mouse_y > przyciska.y && mouse_y < przyciska.y + przycisk->h ) { masked_blit( przycisk2, bufor, 0, 0, 3, 30, przycisk2->w, przycisk2->h ); } show_mouse( bufor ); textprintf_ex( bufor, font, 20, 40, makecol( 30, 200, 30 ), - 1, "Myszka x = %d, y = %d, klawisz = %d !", mouse_x, mouse_y, mouse_b ); blit( bufor, screen, 0, 0, 0, 0, 500, 150 ); } allegro_exit(); return( 0 ); } END_OF_MAIN();
O to chodziło? Nie wyświetlaj myszki na buforze. Popraw to. |
|
Gronek8624 Temat założony przez niniejszego użytkownika |
» 2010-07-07 22:44:21 Tak mniej więcej, tylko miało by to działać tak samo jak w notatniku są te przyciski na górnym pasku
|
|
malan |
» 2010-07-07 22:46:18 Zamęczysz się chłopie... :). Jeżeli chcesz pisać aplikacje z użyciem GUI, to zacznij od WinAPI :). |
|
lenrokskate |
» 2010-07-08 10:02:42 @malan
Qt rox, nie każ mu się tortutować z tym całym strukturalnym, bezsensownym i nieprzenośnym WinAPI
#edit chyba, że będzie pisał allegro+winapi , wtedy tak, ale nie samo WinAPI wtedy może zrobić menu w zasobach i oszczędzi sobie całej roboty |
|
dmx81 |
» 2010-07-08 19:41:33 nie czytalem kodu jaki wkleiles, na szybko napisze jak ja bym to widzial :)
- bitmapa, na ktorej rysujemy nasze przyciski (ona bedzie schowana)
- bitmapa, ktora widzimy, na niej rysujemy glowne menu
jesli pozycja myszki == pozycji jakiegos przycisku menu glownego - pokaz bitmape z dodatkowymi przyciskami dla tego menu
moznaby utworzyc to przez bool disp_menu=true, if myszka == przycisk menu glownego|| myszka == bitmapa_wysuwana && disp_menu==true
czyli jest trzymamy kursor na pozycji OPCJE, rysuje sie nowa bitmapa na ekranie, a na niej narysowane sa dodatkowe przyciski/opcje
dopoki myszka nie wyjedzie poza obszar nowonarysowanej bitmapy lub przycisku OPCJE, bitmapa ma ustawione disp_menu jako true
jesli najedziemy na jakis przycisk na narysowanym menu i menu_disp==true, wykona sie jakas okreslona akcja....
mam nadzieje, ze napisalem zrozumiale, jesli nie, sporobuje dzis wieczorem nad tym posiedziec i zrobic samemu cos podobnego, oczywiscie nie patrzac na kod jaki wkleiles :) |
|
« 1 » 2 |