n° 219
Novembre 2017
Dicembre 12, 2017, 11:38:59 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Eliminare sfarfallio cursore nella finestra console ?  (Letto 948 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
beppo63
Jr. Member
**

Karma: +0/-102
Scollegato Scollegato

Messaggi: 97


Mostra profilo
« inserita:: Febbraio 18, 2017, 10:08:34 »

Salve ho fatto un sistema non API per scrollare orizzontalmente il contenuto della finestra console per un possibile gioco .
Però mi da fastidio vedere il cursore che appare casualmente sullo schermo !
Come posso fare per non farlo apparire ?
Tutti i suggerimenti sono ben accetti !
Io uso Code blocks 10.5 in Windows 7 64 bit.
Ringrazio anticipatamente !
Codice:
#include <windows.h>    // Win32 Header File
#include <stdio.h>
#include<stdio.h>
void gotoxy(int x, int y);
char stringaverticale[26][81];
int     Screen (int,int,int);
int main()
{
    srand(time(NULL));
    int b=0,w,k,d,v,m=78,flag=0;
    int x=0;
    int y=0;
    int h=0;
    int colonna = 2; //Valore della colonna dove cominciare a leggere le 79 colonne
    int num_casuale=0;
    num_casuale=1+rand()%10;

inizio:
    /*Lettura contenuto dello schermo*/
    for(d=0; d<=78; d++) //Conta 79 colonne (Da 2 a colonna finale a destra
    {
        for(w=1; w<=25; w++) //Conta le caselle della colonna
        {
            b=Screen(w,colonna,0); //Lettura valore in coordinata corrente
            stringaverticale[w-1][d]=b; //Immagazzinamento valori schermo in stringa bidimensionale
        }
        colonna++; //Incrementa le colonne da leggere per screen()
    }

    if(flag==1)stringaverticale[24][78]='|';
    /*Stampa contenuto dello schermo*/
    for(v=0; v<=79; v++)
    {
        for(w=0; w<=24; w++)
        {
            gotoxy(x,y++);
            printf("%c",stringaverticale[w][v]);
            if(v==79&&y==24)
            {
                x=0;
            }
            if(y==25)
            {
                y=24;
            }
        }
        x++;
        y=0;
    }

    gotoxy(m,24);
    if(flag==0)
    {
        printf("%c ",stringaverticale[24][78]);
        flag=1;
    }
    colonna=2;
    x=0;
    y=0;

//Stampa carattere '|' di lunghezza casuale sull'ultima colonna più a destra
    num_casuale=1+rand()%10; //generazione numero casuale
    gotoxy(79,23);
    printf("%c",'|');
    _sleep(150); //ciclo di attesa

    for(h=1; h<=num_casuale; h++)
    {
        gotoxy (79,23-h);
        printf("%c",'|');
    }

    goto inizio;
    return 0;
}

int Screen (int y,int x,int mode)
{
    HANDLE  hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    DWORD Slen;
    COORD Coord;
    WORD  Attr;
    char  Char[2];
    Coord.X=x-1;
    Coord.Y=y-1;
    ReadConsoleOutputCharacterA(hConsole,Char,1,Coord,&Slen);
    ReadConsoleOutputAttribute(hConsole,&Attr,1,Coord,&Slen);
    if(mode)
        return  Attr;
    return  Char[0];
}
void gotoxy(int x, int y)
{
    HANDLE HConsole;
    CONSOLE_SCREEN_BUFFER_INFO ConsoleInfo;
    HConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    ConsoleInfo.dwCursorPosition.X = x;
    ConsoleInfo.dwCursorPosition.Y = y;
    SetConsoleCursorPosition(HConsole,ConsoleInfo.dwCursorPosition);
}

Registrato
oregon
Jr. Member
**

Karma: +22/-6
Scollegato Scollegato

Messaggi: 239


Mostra profilo
« Risposta #1 inserita:: Febbraio 18, 2017, 10:48:11 »

Non API ? Il codice è pieno di chiamate ad API ...

Per "spegnere" il cursore puoi chiamare un'altra API

Codice:
HANDLE hConsoleOutput;
CONSOLE_CURSOR_INFO structCursorInfo;
hConsoleOutput = GetStdHandle( STD_OUTPUT_HANDLE );
structCursorInfo.dwSize = 1;
structCursorInfo.bVisible = FALSE;
SetConsoleCursorInfo( hConsoleOutput, &structCursorInfo );
Registrato
beppo63
Jr. Member
**

Karma: +0/-102
Scollegato Scollegato

Messaggi: 97


Mostra profilo
« Risposta #2 inserita:: Febbraio 18, 2017, 11:25:39 »

Grazie per l'aiuto !
Il programmino con API fornita da te è il seguente :
Codice:
#include <windows.h>    // Win32 Header File
#include <stdio.h>
#include<stdio.h>
void gotoxy(int x, int y);
void visibilita_cursore();
char stringaverticale[26][81];
int     Screen (int,int,int);
int main()
{
    srand(time(NULL));
    int b=0,w,k,d,v,m=78,flag=0;
    int x=0;
    int y=0;
    int h=0;
    int colonna = 2; //Valore della colonna dove cominciare a leggere le 79 colonne
    int num_casuale=0;
    num_casuale=1+rand()%10;
visibilita_cursore(); //disabilita la visibilita del cursore
inizio:
    /*Lettura contenuto dello schermo*/
    for(d=0; d<=78; d++) //Conta 79 colonne (Da 2 a colonna finale a destra
    {
        for(w=1; w<=25; w++) //Conta le caselle della colonna
        {
            b=Screen(w,colonna,0); //Lettura valore in coordinata corrente
            stringaverticale[w-1][d]=b; //Immagazzinamento valori schermo in stringa bidimensionale
        }
        colonna++; //Incrementa le colonne da leggere per screen()
    }

    if(flag==1)stringaverticale[24][78]='|';
    /*Stampa contenuto dello schermo*/
    for(v=0; v<=79; v++)
    {
        for(w=0; w<=24; w++)
        {
            gotoxy(x,y++);
            printf("%c",stringaverticale[w][v]);
            if(v==79&&y==24)
            {
                x=0;
            }
            if(y==25)
            {
                y=24;
            }
        }
        x++;
        y=0;
    }

    gotoxy(m,24);
    if(flag==0)
    {
        printf("%c ",stringaverticale[24][78]);
        flag=1;
    }
    colonna=2;
    x=0;
    y=0;

//Stampa carattere '|' di lunghezza casuale sull'ultima colonna più a destra
    num_casuale=1+rand()%10; //generazione numero casuale
    gotoxy(79,23);
    printf("%c",'|');
    _sleep(150); //ciclo di attesa

    for(h=1; h<=num_casuale; h++)
    {
        gotoxy (79,23-h);
        printf("%c",'|');
    }

    goto inizio;
    return 0;
}

int Screen (int y,int x,int mode)
{
    HANDLE  hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    DWORD Slen;
    COORD Coord;
    WORD  Attr;
    char  Char[2];
    Coord.X=x-1;
    Coord.Y=y-1;
    ReadConsoleOutputCharacterA(hConsole,Char,1,Coord,&Slen);
    ReadConsoleOutputAttribute(hConsole,&Attr,1,Coord,&Slen);
    if(mode)
        return  Attr;
    return  Char[0];
}
void gotoxy(int x, int y)
{
    HANDLE HConsole;
    CONSOLE_SCREEN_BUFFER_INFO ConsoleInfo;
    HConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    ConsoleInfo.dwCursorPosition.X = x;
    ConsoleInfo.dwCursorPosition.Y = y;
    SetConsoleCursorPosition(HConsole,ConsoleInfo.dwCursorPosition);
}

void visibilita_cursore()
{
    HANDLE hConsoleOutput;
CONSOLE_CURSOR_INFO structCursorInfo;
hConsoleOutput = GetStdHandle( STD_OUTPUT_HANDLE );
structCursorInfo.dwSize = 1;
structCursorInfo.bVisible = FALSE;
SetConsoleCursorInfo( hConsoleOutput, &structCursorInfo );
}
Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines