Projeto 03 - Menu controlado por setas em C
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ção

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:
TelaPrincipal

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:

Tela1_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

R$ 100 / h
Guilherme F.
Governador Valadares / MG
Guilherme F.
5,0 (10 avaliações)
Horas de aulas particulares ministradas 3 horas de aula
Tarefas resolvidas 1 tarefa resolvida
Identidade verificada
  • CPF verificado
  • E-mail verificado
1ª hora grátis
Computação - C Portugol Computação - Java
Mestrado: Ciências e Técnicas Nucleares (Universidade Federal de Minas Gerais (UFMG))
Venha aprender Matemática, Informática Geral, Computação
Cadastre-se ou faça o login para comentar nessa publicação.

Confira artigos similares

Confira mais artigos sobre educação

+ ver todos os artigos

Encontre um professor particular

Busque, encontre e converse gratuitamente com professores particulares de todo o Brasil