Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro, C++] Rozwijane menu z listą przycisków

Ostatnio zmodyfikowano 2010-07-09 18:18
Autor Wiadomość
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 :
C/C++
#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();
P-19620
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?
P-19622
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
P-19638
malan
» 2010-07-07 22:39:23
C/C++
#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.
P-19658
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
P-19660
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 :).
P-19662
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
P-19670
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 :)
P-19683
« 1 » 2
  Strona 1 z 2 Następna strona