Por: Guilherme F. 17 de Outubro de 2018
Projeto 03 - Menu controlado por setas em C
Computação Geral Geral Geral Programação Curso superior Introdução a computaçãoEncontre um professor e combine aulas particulares Presenciais ou Online
Neste projeto será apresentado um menu simples com os itens cadastro, relatório e sair, mas será acessado pelas setas direcionais do teclado.
Aprender este truque permitirá fazer até mesmo alguns jogos divertidos em C.
Neste projeto não foi usada a biblioteca gráfica conio 2, conforme apresentado no projeto 01 da urna eletrônica devido ao trabalho para instalá-la. Ela seria necessária para o uso da função gotoxy para posicionar o cursor em um local específica da tela e também para colocar cores de fundo. Mas ao invés disso, foi acrescentada a biblioteca windows.h já padrão do Dev e foi criada uma função chamada moveXY substituindo a gotoxy, usado system("color 4F") para cor de fundo e, por fim, _beep(400,100) para emitir um som ao mover o cursor e ao entrar em cada item do menu.
A função moveXY é apresentada abaixo:
void moveXY(int x, int y, char t[10]) { HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); COORD position = {x,y}; SetConsoleCursorPosition(hStdout, position); printf("%s", t); }
Nesta função, são passadas as coordenadas x,y do cursor, bem como o texto que será apresentado na posição específica.
A seguir temos a função menu com o Título "menu movel" na posição X=32 e Y=1, seguido dos outros itens como: Cadastro, Relatório e Sair.
void menu() { moveXY(32,1, "::: MENU MOVEL :::"); moveXY(33,5,"1- Cadastro"); moveXY(33,10,"2- Relatorio"); moveXY(33,15,"1- Sair"); }
Abaixo temos o resultado da execução desta função:
Temos a seguir a função main que já muda a cor de fundo com system ("color 4F"). Posiciona o cursor "->" para X=30 e Y = 5.
Um trecho do código abaixo:
int main() { system("color 4F"); moveXY(30,5, "->"); do { menu(); moveXY(posX, posY, "->"); a = toupper(getch()); switch(a) { case 'H': if (posY > 5) { moveXY(30,posY, " "); posY-=5; moveXY(30,posY, "->"); _beep(400,100); } break;
Entra-se em um loop infinito pelo do...while(1). Chama-se a função menu(). Captura-se a tecla pressionada pelo usuário através do getch(). Neste caso, espera-se o pressionamento das setas direcionais, do qual temos:
1. seta para cima: H
2. seta para baixo: P
3. enter: 13
Entra-se no swicth e será testada a tecla. O cursor poderá estar em apenas 3 posições de Y: 5 = cadastro, 10 = relatório ou 15 = sair.
Caso H, ou seja, o usuário pressionou a seta para cima. Verifica-se Se posY > 5, isso significa que só poderá estar na posição 10(cadastro) ou 15(sair). Então limpa-se a posição do cursor com moveXY(30,posY, " "), decrementa-se em 5 linhas com posY-=5 , pois vai subir o cursor. Em seguida, desenha-se o cursor na nova posição com moveXY(30,posY,"->"). E por fim, emite-se um som com _beep(400,100).
O mesmo raciocínio será usado caso P, ou seja, para baixo.
Depois temos o caso 13, ou seja, caso o usuário pressione ENTER.
Assim, bastará verificar se o posY estará nas posições 5(cadastro),10(relatorio) ou 15(sair) e assim executar o que cada item corresponde.
Tela de cadastro:
Código completo pode ser acessado aqui: link
Caso tenha interesse nas aulas particulares de algoritmos e programação, entre em contato comigo: https://profes.com.br/projetosaza
- CPF verificado
- E-mail verificado