View Single Post
Old 25-11-2002, 15:35   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Rielaborandola un po'...
Codice:
#include <windows.h>
 
void gotoxy(int, int); 
 
HANDLE hStdout, hStdin; 
CONSOLE_SCREEN_BUFFER_INFO csbiInfo; 
 
void main(void) 
{ 
    DWORD cWritten, fdwMode, fdwOldMode; 
    WORD wOldColorAttrs; 

    // Get handles to STDIN and STDOUT. 

    hStdin = GetStdHandle(STD_INPUT_HANDLE); 
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
    if (hStdin == INVALID_HANDLE_VALUE || hStdout == INVALID_HANDLE_VALUE) 
    {
        MessageBox(NULL, "GetStdHandle", "Console Error", MB_OK);
        return;
    }

    // Save the current text colors. 

    if (! GetConsoleScreenBufferInfo(hStdout, &csbiInfo)) 
    {
        MessageBox(NULL, "GetConsoleScreenBufferInfo", "Console Error", MB_OK); 
        return;
    }

    wOldColorAttrs = csbiInfo.wAttributes; 

    // Set the text attributes to draw red text on black background. 

    if (! SetConsoleTextAttribute(hStdout, FOREGROUND_GREEN|FOREGROUND_INTENSITY))
    {
        MessageBox(NULL, "SetConsoleTextAttribute", "Console Error", MB_OK);
        return;
    }
	
    // Turn off the line input mode, and echo the input mode. 

    if (! GetConsoleMode(hStdin, &fdwOldMode)) 
    {
        MessageBox(NULL, "GetConsoleMode", "Console Error", MB_OK); 
        return;
    }

    fdwMode = fdwOldMode & 
        ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT); 
    if (! SetConsoleMode(hStdin, fdwMode)) 
    {
        MessageBox(NULL, "SetConsoleMode", "Console Error", MB_OK); 
        return;
    }

    // Without line and echo input modes, ReadFile returns 
    // when any input is available. Carriage returns must 
    // be handled, and WriteFile is used to echo input. 

	LPSTR lpszPrompt1 = "Type a line and press Enter, or q to quit: ";
    gotoxy(10, 5);
    if (! WriteFile( 
            hStdout,              // output handle 
            lpszPrompt1,          // prompt string 
            lstrlen(lpszPrompt1), // string length 
            &cWritten,            // bytes written 
            NULL) )               // not overlapped 
        {
            MessageBox(NULL, "WriteFile", "Console Error", MB_OK); 
            return;
        }
    gotoxy(17, 12);
    if (! WriteFile( 
            hStdout,              // output handle 
            lpszPrompt1,          // prompt string 
            lstrlen(lpszPrompt1), // string length 
            &cWritten,            // bytes written 
            NULL) )               // not overlapped 
        {
            MessageBox(NULL, "WriteFile", "Console Error", MB_OK); 
            return;
        }



    // Restore the original console mode. 

    SetConsoleMode(hStdin, fdwOldMode);

    // Restore the original text colors. 

    SetConsoleTextAttribute(hStdout, wOldColorAttrs);
}

// The NewLine function handles carriage returns when the processed 
// input mode is disabled. It gets the current cursor position 
// and resets it to the first cell of the next row. 
 
void gotoxy(int x, int y) 
{ 
    if (! GetConsoleScreenBufferInfo(hStdout, &csbiInfo)) 
    {
        MessageBox(NULL, "GetConsoleScreenBufferInfo", "Console Error", MB_OK); 
        return;
    }

    csbiInfo.dwCursorPosition.X = x; 

	csbiInfo.dwCursorPosition.Y = y; 
 
    if (! SetConsoleCursorPosition(hStdout, 
        csbiInfo.dwCursorPosition)) 
    {
        MessageBox(NULL, "SetConsoleCursorPosition", "Console Error", MB_OK); 
        return;
    }
}
Purtroppo non si può usare la cout per l'output, ma solo la WriteFile...

Comunque volendo puoi crearti una classe che serializza i vari tipi di input e li scrive con la WriteFile...
cionci è offline   Rispondi citando il messaggio o parte di esso