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ść
malan
» 2010-07-08 22:03:01
@lenrokskate: Napisałeś choć jeden program w WinAPI, czy swoją wypowiedź budujesz na podstawie opinii innych?
P-19690
dmx81
» 2010-07-09 03:37:42
C/C++
#include <allegro.h>
#include <vector>

class OKNO
{
public:
    bool disp_okno;
    BITMAP * obrazek;
    int x, y, s, w;
    OKNO() { };
    OKNO( int X, int Y, int S, int W )
    {
        x = X;
        y = Y;
        s = S;
        w = W;
    }
   
   
} GLOWNE, OPCJE, OPCJA1, SCHOWANE;

int main()
{
    allegro_init();
    install_keyboard();
    install_mouse();
    set_color_depth( 16 );
    set_gfx_mode( GFX_AUTODETECT, 640, 480, 0, 0 );
   
    std::vector < OKNO > wektor;
   
    OKNO GLOWNE( 20, 20, 600, 440 );
    GLOWNE.obrazek = create_bitmap( GLOWNE.s, GLOWNE.w );
    GLOWNE.disp_okno = true;
    if( !GLOWNE.obrazek )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie mogę utworzyć GLOWNE !" );
        allegro_exit();
        return 0;
    }
    wektor.push_back( GLOWNE );
   
    OKNO OPCJE( 0, 0, 600, 30 );
    OPCJE.obrazek = create_bitmap( OPCJE.s, OPCJE.w );
    OPCJE.disp_okno = true;
    if( !OPCJE.obrazek )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie mogę utworzyć OPCJE !" );
        allegro_exit();
        return 0;
    }
    wektor.push_back( OPCJE );
   
   
    OKNO OPCJA1( 5, 5, 77, 20 );
    OPCJA1.obrazek = create_bitmap( OPCJA1.s, OPCJA1.w );
    OPCJA1.disp_okno = true;
    if( !OPCJA1.obrazek )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie mogę utworzyć OPCJA1 !" );
        allegro_exit();
        return 0;
    }
    wektor.push_back( OPCJA1 );
   
    OKNO SCHOWANE( OPCJA1.x, OPCJE.w, 77, 200 );
    SCHOWANE.obrazek = create_bitmap( SCHOWANE.s, SCHOWANE.w );
    SCHOWANE.disp_okno = false;
    if( !SCHOWANE.obrazek )
    {
        set_gfx_mode( GFX_TEXT, 0, 0, 0, 0 );
        allegro_message( "Nie mogę utworzyć SCHOWANE !" );
        allegro_exit();
        return 0;
    }
    wektor.push_back( SCHOWANE );
   
    bool wysuwanie1 = false;
    bool wysuwanie2 = false;
    int temp_wysokosc = SCHOWANE.w;
    int temp_pos_Y = 0;
   
    while( !key[ KEY_ESC ] )
    {
        clear_to_color( SCHOWANE.obrazek, makecol( 11, 44, 52 ) );
        clear_to_color( GLOWNE.obrazek, makecol( 136, 144, 172 ) );
        clear_to_color( OPCJE.obrazek, makecol( 200, 200, 255 ) );
        clear_to_color( OPCJA1.obrazek, makecol( 121, 212, 255 ) );
       
        if( SCHOWANE.disp_okno )
        {
            textprintf_ex( SCHOWANE.obrazek, font, 1, 10, makecol( 200, 220, 20 ), 0, "OPCJA1" );
            textprintf_ex( SCHOWANE.obrazek, font, 1, 25, makecol( 200, 20, 220 ), 0, "OPCJA2" );
            textprintf_ex( SCHOWANE.obrazek, font, 1, 40, makecol( 200, 220, 220 ), 0, "OPCJA3" );
            textprintf_ex( SCHOWANE.obrazek, font, 1, 55, makecol( 50, 220, 120 ), 0, "OPCJA4" );
            textprintf_ex( SCHOWANE.obrazek, font, 1, 70, makecol( 200, 120, 120 ), 0, "OPCJA5" );
            textprintf_ex( SCHOWANE.obrazek, font, 1, 85, makecol( 200, 220, 220 ), 0, "OPCJA6" );
            textprintf_ex( SCHOWANE.obrazek, font, 1, 100, makecol( 200, 210, 230 ), 0, "OPCJA7" );
        }
       
        if( is_inside_bitmap( OPCJA1.obrazek, mouse_x, mouse_y, 0 ) ||( is_inside_bitmap( SCHOWANE.obrazek, mouse_x, mouse_y, 0 ) && SCHOWANE.disp_okno ) )
        {
           
            if( mouse_b == 1 )
                 SCHOWANE.disp_okno = true;
            else if( mouse_b == 2 )
            {
                wysuwanie1 = true;
                SCHOWANE.disp_okno = true;
            }
            else
                 wysuwanie1 = false;
           
            if( wysuwanie1 == true && wysuwanie2 == false )
            {
                temp_pos_Y = SCHOWANE.w;
                temp_wysokosc = 0;
                wysuwanie1 = false;
                wysuwanie2 = true;
            }
            if( wysuwanie2 == true )
            {
                temp_pos_Y--;
                temp_wysokosc++;
                rest( 5 );
                if( temp_pos_Y <= 0 )
                     temp_pos_Y = 0;
               
                if( temp_wysokosc >= SCHOWANE.w )
                     temp_wysokosc = SCHOWANE.w;
               
            }
        }
        else
        {
            SCHOWANE.disp_okno = false;
            temp_pos_Y = 0;
            temp_wysokosc = SCHOWANE.w;
            wysuwanie2 = false;
        }
       
        masked_blit( OPCJA1.obrazek, OPCJE.obrazek, 0, 0, OPCJA1.x, OPCJA1.y, OPCJA1.s, OPCJA1.w );
        masked_blit( OPCJE.obrazek, GLOWNE.obrazek, 0, 0, OPCJE.x, OPCJE.y, OPCJE.s, OPCJE.w );
        if( SCHOWANE.disp_okno == true )
             masked_blit( SCHOWANE.obrazek, GLOWNE.obrazek, 0, temp_pos_Y, SCHOWANE.x, SCHOWANE.y, SCHOWANE.s, temp_wysokosc );
       
        show_mouse( GLOWNE.obrazek );
       
        masked_blit( GLOWNE.obrazek, screen, 0, 0, GLOWNE.x, GLOWNE.y, GLOWNE.s, GLOWNE.w );
    }
   
   
    destroy_bitmap( GLOWNE.obrazek );
    destroy_bitmap( OPCJE.obrazek );
    destroy_bitmap( OPCJA1.obrazek );
    destroy_bitmap( SCHOWANE.obrazek );
   
    allegro_exit();
    return 0;
   
} END_OF_MAIN();

2 godzinki i takie cos nabazgralem :)

czy o takie cos Ci chodzi? kliknij na ten obrazek raz lewym, raz prawym - wysuwa sie lub poprostu wyskakuje, chowa sie jak uciekniesz kursorem poza zasieg


oczywiscie posiedziec mozna nastepne 2 godzinki i :
-zalatwic sprawe myszki (bo nie mialem juz sily do tego - jak widac przykrywa sie, wiec troche na okolo to zrobilem)
-uaktywnic menu wysuwane, aby naciskajac cos sie dzialo

ale napisalem tylko pogladowy pomysl na dzialajace wysuwajace sie menu, bo lubie takie zadania, wiadomo - ucze sie, wiec kazde wyzwanie mobilizuje, a samemu ciezko czasem cos wymyslec :) napisz czy o to ci chodzilo, caly kod wg wlasnego pomyslu, wiec jakby cos bylo nie jasne to pytaj

PS>>  dodalem destroy_bitmap dla obrazkow oraz allegro_exit(), bo wczesniej pominalem.... ale teraz zamykajac program wyskakuje jakis blad...

PS2>> poprawilem wyswietlanie myszki
P-19692
lenrokskate
» 2010-07-09 13:25:09
@malan

opieram to zarówno na własnych doświadczeniach, jak i zdaniu innych...
P-19701
DejaVu
» 2010-07-09 14:04:53
@malan: QT gdyby było gorsze w użyciu niż WinAPI to nikt by na niego się nie przesiadał. Niech każdy używa technologii jaką uważa za stosowną. Anyway... dlaczego dyskutujemy o QT skoro w temacie jest napisane Allegro?
P-19702
Gronek8624
Temat założony przez niniejszego użytkownika
» 2010-07-09 18:18:00
Tak o to mi chodziło
Dziękuje za pomoc

A tak na marginesie to nie miał bym już ochoty uczyć się WinAPI.
P-19707
1 « 2 »
Poprzednia strona Strona 2 z 2