Ir ao conteúdo

Seta do Mouse e CLS


Sylerr

Posts recomendados

Postado

Bom, estou com um problema com manusear a seta do mouse, como fazer eu sei. porém, não sei por que causa,motivo,razão o programa para de le a seta se eu colocar um


system("cls");

em QUALQUER parte do código, independente da onde for, ele para de ler, se colocar um cls no meio do código :s


#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
#include <cstdlib>



typedef struct Aluno
{
int matricula;
char nome[60];
} aluno;

typedef struct Disciplina
{
int codigo;
char nome[50];
} disciplina;

typedef struct relação{
int codigoM, codigoD;
}relação;

void gotoxy( int x, int y )
{
COORD coord;
coord.X = (short)x;
coord.Y = (short)y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

bool TESTECOD(int *auxcod, aluno *&Regbin, FILE *&Arqbin)
{
Regbin = (aluno *)malloc(sizeof(aluno));
Arqbin = fopen("Arqbin.dat","r+b");
if(Arqbin != NULL)
{
do{
fread(Regbin,sizeof(aluno),1,Arqbin);
if(*auxcod==Regbin->matricula)
{
gotoxy(0,24);printf("\nMatricula ja existe. Informe outra.");
Sleep(1000);
getch();
return false;
}
}while(!feof(Arqbin));
}
return true;
fclose(Arqbin);
}

/**************************** NOME **********************/
void NOME(aluno *&Regbin)
{
char aux[11];
fflush(stdin);
std::cout<<"\nQual o nome do Aluno ";
gets(aux);
strcpy(Regbin->nome, aux);
}

/**************************** COD ***********************/
int COD(int *auxcod)
{
int aux;

std::cout<<"\n\nQual a matricula do Aluno? ";
std::cin>>aux;
*auxcod=aux;
}


/********************************************************* CADASTRAR *****************************************/
void CADASTRAR(aluno *&Regbin, FILE *&Arqbin)
{
int auxcod, axaux;
//system("cls");
Regbin = (aluno *)malloc(sizeof(aluno));
Arqbin = fopen("Arqbin.dat","a+b");
if(Arqbin!=NULL)
{
COD(&auxcod);
if (TESTECOD(&auxcod, Regbin, Arqbin))
{
Regbin->matricula=auxcod;
NOME(Regbin);
fwrite(Regbin,sizeof(aluno),1,Arqbin);
}
}
fclose(Arqbin);
}







int ProcessaEvento()
{
int a_X,a_Y, result;
INPUT_RECORD ir_Evento;
DWORD dw_Saida;
BOOL bl_Finalizar = 0;
do{
gotoxy(24,5);printf("____________MENU____________");
gotoxy(23,6);printf("| %c%c Cadastrar |",178,178);
for(int a=7;a<20;a=a+2)
{
gotoxy(23,a);printf("| |");
}
gotoxy(23,8);printf("| %c%c Editar Cadastro |",176,176);
gotoxy(23,10);printf("| %c%c Listar |",178,178);
gotoxy(23,12);printf("| %c%c Deletar Cadastro |",176,176);
gotoxy(23,14);printf("| %c%c Importar BD |",178,178);
gotoxy(23,16);printf("| %c%c Exportar BD |",176,176);
gotoxy(23,18);printf("| relação |");
gotoxy(23,20);printf("| %c%c Fechar Programa |",176,176);
for(int i=24;i<52;i++)
{
gotoxy(i,21);printf("%c", 238);
}
ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE),&ir_Evento,1,&dw_Saida);
if(ir_Evento.EventType == MOUSE_EVENT) bl_Finalizar=0;
if(ir_Evento.Event.MouseEvent.dwEventFlags == MOUSE_MOVED)
{
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),(COORD){0,2});
std::cout<<"x :"<<ir_Evento.Event.MouseEvent.dwMousePosition.X<<" \ny :"<<ir_Evento.Event.MouseEvent.dwMousePosition.Y<<" \n";
} if(ir_Evento.Event.MouseEvent.dwEventFlags == DOUBLE_CLICK)
{

if((ir_Evento.Event.MouseEvent.dwMousePosition.X == 25)&&(ir_Evento.Event.MouseEvent.dwMousePosition.Y == 6) ||
(ir_Evento.Event.MouseEvent.dwMousePosition.X == 26)&&(ir_Evento.Event.MouseEvent.dwMousePosition.Y == 6))
{
a_X = ir_Evento.Event.MouseEvent.dwMousePosition.X;
a_Y = ir_Evento.Event.MouseEvent.dwMousePosition.Y;
printf("%d %d",a_X,a_Y);
result=1;
return result; // RETORNA CADASTRO
}
if((ir_Evento.Event.MouseEvent.dwMousePosition.X == 25)&&(ir_Evento.Event.MouseEvent.dwMousePosition.Y == 20) ||
(ir_Evento.Event.MouseEvent.dwMousePosition.X == 26)&&(ir_Evento.Event.MouseEvent.dwMousePosition.Y == 20))
{
a_X = ir_Evento.Event.MouseEvent.dwMousePosition.X;
a_Y = ir_Evento.Event.MouseEvent.dwMousePosition.Y;
printf("%d %d",a_X,a_Y);
result=0;
return result; //RETORNA SAIR
}

}


}while(bl_Finalizar ==0);





// retorna y
}




main()
{

FILE *Arqbin, *ArqbinTemp, *Arqtxt;
aluno *Regbin=NULL;
Regbin = (aluno *)malloc(sizeof(aluno));

disciplina *RegbinD=NULL;
RegbinD = (disciplina *)malloc(sizeof(disciplina));
FILE *ArqbinD, *ArqbinTempD;

relação *RegbinR=NULL;
RegbinR = (relação *)malloc(sizeof(relação));
FILE *ArqbinR, *ArqbinTempR;


int sair =1;
int b=0;
// system("cls");
do
{
switch(ProcessaEvento())
{
case 0:
{
sair = 0;
printf("Saindo");
break;
}
case 1:
{

CADASTRAR(Regbin,Arqbin);
break;
}
}
}while(sair!=0);

printf("aaaa");
}

ta o código ai em cima.

o system CLS ta comentado no Main ()

tente roda com ele sem o cls, e depois tira o comentario. Ele para de le a posição do mouse e não detecta mais 2 clicks nos menu.

Alguem sabe o porque disso? ou outro meio pra faze isso funciona.

Att;

Postado

eu cheguei a da uma olhada, porém esse é usando o mouse mesmo, pra entra num menu, da 2 clicks, fiz esse também pra faculdade. um Projeto de TCC qe tirei A, dai pro TCC2 queria tenta acessar menus com o mouse mesmo.

ja fiz com Letras, Numeros, pra CIMA e pra BAIXO com o teclado. pro lado e pro outro diagonal, duplo twist carpado, Triple ByeBye Bird (seila como escreve) kkkk, mas queria tenta assim. usando o MOUSE, só o mouse pra acessa os menu.

porém ele da esse negocio, qe se eu coloca pra limpa a tela. ele para de funciona. o programa nao reconhece mais o MOUSE.

independente da onde eu coloque o system("cls")

MENU ACESSO com SETA TECLADO



#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
#include <cstdlib>

# define LIMPAMENS " "
#define ACIMA 72
#define ABAIXO 80
#define ENTER 13
#define ESC 27

void gotoxy( int x, int y )
{
COORD coord;
coord.X = (short)x;
coord.Y = (short)y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}


int MENU_PRINCIPAL(int auxiliar)
{
int aux;
int posicao = 6, tecla;
do{
system("cls");
gotoxy(24,5);printf("____________MENU____________");
gotoxy(23,6);printf("| Cadastrar |");
gotoxy(23,7);printf("| Editar Cadastro |");
gotoxy(23,8);printf("| Listar |");
gotoxy(23,9);printf("| Deletar Cadastro |");
gotoxy(23,10);printf("| Importar BD |");
gotoxy(23,11);printf("| Exportar BD |");
gotoxy(23,12);printf("| relação |");
gotoxy(23,13);printf("| Fechar Programa |");
for(int i=24;i<52;i++)
{
gotoxy(i,14);printf("%c", 238);
}
gotoxy(24,posicao);printf("%c%c",16,16);gotoxy(50,posicao);printf("%c%c",17,17);
tecla=getch();
if(tecla == ABAIXO)
{
posicao=posicao+1;
if(posicao==14)
{
posicao=6;
}

}
if (tecla == ACIMA)
{
posicao=posicao-1;
if(posicao==5)
{
posicao=13;
}

}

}while(tecla!= ENTER);


auxiliar=posicao;
return auxiliar;

}



main (int auxiliar)
{
MENU_PRINCIPAL(auxiliar);
}


claro qe ai só tem 1 pedaço, porque me matei pra faze isso, ta super completo ele, 100% funcional, se relaciona uma matéria com uma disciplina. na hora de deleta uma materia nao vai pode, porque tem uma relação. = PostGree, não pode deleta uma tabela se ela é chave estrangeira de outra.

Postado

é qe na faculdade eles botam isso, pra usa algumas bibliotecas mas eu aprendi nas antigas dai fica o costume kk

mas o problema ainda persiste. não da pra da um system "cls" qe ele da pau no código... :s

por enquanto a minha saída é esta...


#define LIMPAMENS " "


void LIMPA_TELA()
{
for(int i=0;i<25;i++)
{
gotoxy(0,i);cout<<LIMPAMENS;
}
gotoxy(0,0);
}

Ele "poe espaço em toda a dela do DOS pra "fingir" qe deu um cls.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!