Conheça a iniciativa da Biblioteca dos Desenvolvedores  
Índice da Biblioteca  
Área dos Usuários  
Fórum de Discussão  
Forúm
 
  Rotinas do Mouse


A biblioteca allegro provê funções para leitura do status do mouse e visualização do cursor na tela. Você consegue ler a posição atual do mouse e o status dos botões através de variáveis globais da própria biblioteca.

mouse.bmp

Você deve Instalar a biblioteca do mouse antes de usar as funções.

Para fazer isso você deve usar a função int install_mouse() no inicio do código.
A sintaxe é:

install_mouse();

O allegro oferece três maneiras de indicar o mouse da tela:

  • Cursor padrão do allegro
  • Hardware Cursor
  • Cursor padrão do sistema operacional



CURSOR PADRÃO DO ALLEGRO:


O allegro é responsável por desenha o cursor do mouse todo tempo.

Use as funções set_mouse_sprite() e show_mouse() para definir o cursor e mostrar o mouse na tela.
Você pode usar a função scare_mouse () ou unscare_mouse () para esconder o mouse quando você não precisar mais dele na tela.


O exemplo abaixo define uma imagem para o mouse e mostra o mouse na tela.


CÓDIGO...
#include <allegro.h>

int main()
{
   allegro_init();
   set_color_depth(32);
   install_mouse();// Instala o mouse
   install_keyboard();
   set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);

   BITMAP *bmpMouse = NULL;
   bmpMouse = create_bitmap(16,16);
   bmpMouse = load_bitmap("mouse.bmp",NULL);

   BITMAP *Buffer = NULL;
   Buffer = create_bitmap(640,480);

   set_mouse_sprite(bmpMouse); // Seta a imagem do mouse

   while( !key[KEY_ESC] )
   {
      clear_bitmap(Buffer);
      show_mouse(Buffer); // Mostra o mouse na tela

      blit(Buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H);
   }

   destroy_bitmap(bmpMouse);
   delete bmpMouse;

   destroy_bitmap(Buffer);
   delete Buffer;

   allegro_exit();
   return 0;
}
END_OF_MAIN();

FIM DO CÓDIGO

 

 

HARDWARE CURSOR:

O allegro permite escolher o tipo do cursor do sistema operacional para desenhar na tela através do próprio hardware.
Use a função show_os_cursor(int) para definir e mostrar o mouse desejado na tela.

Nem todas as configurações gráficas funcionam com essa opção.

No exemplo abaixo vamos definir o nosso mouse com a opção de numero 3 para desenhar na tela.
Segue abaixo o código e a tabela para um melhor entendimento.

Propriedades do mouse definidas pelo Sistema Operacional


CÓDIGO...
int main()
{
   allegro_init();
   set_color_depth(32);
   install_mouse(); // Instala o mouse
   install_keyboard();

   set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);

   while( !key[KEY_ESC] )
   {
      show_os_cursor(3); // Mostra o mouse a tela
      vsync();
   }

   allegro_exit();
   return 0;
}
END_OF_MAIN();

FIM DO CÓDIGO

Obs.: Note que não precisamos usar a função show_mouse() do allegro para mostrar o mouse na tela.
Isso ocorre internamente na função show_os_cursor(int).


CURSOR PADRÃO DO SISTEMA OPERACIONAL:

O allegro não irá desenhar o cursor do mouse na tela, mas vai usar o cursor padrão do sistema operacional.
Você pode usar a função select_mouse_cursor() para selecionar o tipo de cursor para aparecer na tela.

Como usaremos o mouse padrão do sistema você deverá chamar a função enable_hardware_cursor() antes de começar a usar o mouse.


CÓDIGO...
#include <allegro.h>

int main()
{
   allegro_init();
   set_color_depth(32);
   install_mouse(); // Instala o mouse
   install_keyboard();
   set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);

   enable_hardware_cursor(); // Habilita o hard mouse

   BITMAP *Buffer = NULL;
   Buffer = create_bitmap(640,480);

   while( !key[KEY_ESC] )
   {
      select_mouse_cursor(3); // Mostra o mouse na tela
      show_mouse(Buffer);
      blit(Buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H);
      vsync();
   }
   destroy_bitmap(Buffer);
   delete Buffer;

   allegro_exit();
   return 0;
}
END_OF_MAIN();

FIM DO CÓDIGO

 



POSICIONAMENTO, STATUS E VELOCIDADE DO MOUSE
  • extern volatile int mouse_x;
  • extern volatile int mouse_y;
  • extern volatile int mouse_z;
  • extern volatile int mouse_b;
  • extern volatile int mouse_pos;
Acima segue as variáveis globais que contém a posição atual e o status do botão do mouse.

int mouse_x / int mouse_y

Essas variáveis guardam a posição atual do mouse em valores do tipo inteiro.

Exemplo:
textprintf_ex(Buffer,font,0,0,makecol(255,100,200),-1,"Mouse x: %d", mouse_x);
textprintf_ex(Buffer,font,0,10,makecol(255,100,200),-1,"Mouse y: %d", mouse_y);


 

int mouse_z

Essa variável guarda o valor atual da roda (scroll) do mouse. O valor sempre inicia em zero.

Para cima é positivo e para baixo é negativo.

Exemplo:

textprintf_ex(Buffer, font, 0, 0, makecol(255, 100, 200),-1, "Rodinha z: %d", mouse_z);


 

int mouse_b

É uma variável do tipo bit que guarda o status de cada botão.

Bit 1 = Botão esquerdo do mouse
Bit 2 = Botão direito do mouse
Bit 4 = Rodinha do mouse (se houver).

Exemplo:

if (mouse_b & 1)
textprintf_ex(screen, font, 0, 0, makecol(255, 100, 200),-1, "Botao esquerdo clicado");

if (mouse_b & 2)
textprintf_ex(screen, font, 0, 10, makecol(255, 100, 200),-1, "Botao direito clicado");

if (mouse_b & 4)
textprintf_ex(screen, font, 0, 20, makecol(255, 100, 200),-1, "Rodinha do mouse Pressionada");


 

void set_mouse_speed(int xspeed, int yspeed);

Seta a velocidade x e y do mouse separadamente. Por padrão a biblioteca allegro deixa ambos os valores em 2.

Exemplo:

set_mouse_speed(10, 10);


 

void set_mouse_range(int x1, int y1, int x2, int y2);

Seta a área quadrada em que o mouse pode se mover. Por padrão o allegro configura o mouse para se mover por toda tela set_mouse_range (0, 0, SCREEN_W-1, SCREEN_H-1).

Exemplo:

set_mouse_range (0, 0, 100, 100);

No exemplo acima o mouse pode se mover apenas da posição 0 a 100 tanto para c quanto para y. Fora dessa área o valor não é contado nas variáveis de posição mouse_x e mouse_y.


 

VOCÊ PRECISA SABER...

 IMPORTANTE: Ao final do código você não deve usar a função void remove_mouse() para remover o mouse.

Essa rotina já está inclusa dentro da função allegro_exit().
Portanto o allegro irá fazer esse procedimento automaticamente para você.



Caro leitor chegamos ao final do entendimento das principais rotinas do mouse.
Se houver alguma dúvida ou dificuldade em relação ao assunto favor entrar em contato com o pessoal da pelo forum.

Abraço
DBJogos


Contribuidor
Bruno A. Rovela
08/08/2007

Voltar

 
 

01/06/2007 (C) Copyright. Todos os Direitos Reservados. Leia a política de privacidade do portal.
É proibida a cópia de conteúdo deste site de acordo com a Lei Brasileira de Direitos Autorais.