Projeto 03 - Menu controlado por setas em C
Guilherme F.
em 17 de Outubro de 2018

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

38 avaliações
Parnamirim / RN
Especialização: "Teacher Training" e "English for Specific Purposes" (ESP). (EMBASSY CES em Fort Lauderdale - Florida/USA.)
Caro aluno, estou à disposição para te ajudar no aprendizado de inglês, de uma maneira simples e objetiva, com aulas 100% personalizadas e que vão ao encontro da sua necessidade. Os estudos vão desde o reforço gramatical para iniciantes até a preparação para o ENEM, Escolas Militares, provas de Prof ...
Oferece aulas online (sala profes)
R$ 45 / aula
Conversar Whatsapp do professor Roberto M. Whatsapp do professor Roberto M. WhatsApp
1ª aula demonstrativa
Responde em 3 min
Cadastre-se ou faça o login para comentar nessa publicação.

Listas de exercícios, Documentos, Revisões de textos, Trabalhos?

Se seu problema for dificuldade em uma lista de exercícios, revisão de teses e dissertações, correção de textos ou outros trabalhos, peça uma ajuda pelo Tarefas Profes.

Enviar Tarefa

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