Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#include <iostream> #include <windows.h> using namespace std; int main () { /* SYNTAX: HANDLE WINAPI CreateConsoleScreenBuffer( __in DWORD dwDesiredAccess, __in DWORD dwShareMode, __in_opt const SECURITY_ATTRIBUTES *lpSecurityAttributes, __in DWORD dwFlags, __reserved LPVOID lpScreenBufferData ); */ HANDLE ConScrBuf = CreateConsoleScreenBuffer( GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL ,CONSOLE_TEXTMODE_BUFFER, NULL); if( ConScrBuf == INVALID_HANDLE_VALUE) cout << "Fehler!" << GetLastError(); /* BOOL WINAPI WriteConsole( __in HANDLE hConsoleOutput, __in const VOID *lpBuffer, __in DWORD nNumberOfCharsToWrite, __out LPDWORD lpNumberOfCharsWritten, __reserved LPVOID lpReserved ); */ char Buffer[50]; // Beinhaltet die auszugebenden Zeichen LPDWORD CharsWritten = NULL; // Bekommt die geschriebenen Zeichen cout << "Bitte geben Sie ein paar Zeichen in den Buffer ein:" << endl; cin.get(Buffer,49); WriteConsole(ConScrBuf,&Buffer,50,CharsWritten,NULL); cout << "Es wurden " << CharsWritten << " Zeichen geschrieben " << endl; return 0; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
static const COORD bufferSize = { 80, 17 }; static const char* data[] = { "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XX XXXXXXXXXXXXXXX XXXXXXXXXXXX XXX", "XX XXXXXXXXXXXXXXX XXX XXXXXXXXXXXX XXX", "XX XXX XXX XXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXX", "XX XXXXXXXXXXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX XXX", "XX XXX X XXXXXXXXXXXX XXXXXXXX XXX XXX XXX", "XX XXX XXX XXXX XX XX XXXXXXX", "XXX XXXXXXXXXXXXXXXX XXXX XX XXX", "XXX XX XXXXXXXXXXXX XXXX XXXXXXXXXXXX XX XXX", "XXX XX XX XXXX XXXXXX XXXXXXXXXXXX XXXXXXXXXX XXX", "X XX XX XXXX XXX XXXXX XXXX XXXXXX XXX XXXXXXX", "X XX XX XXXXXX XXX XXXXX XX XXXXXX XXX XXXXXXX", "X XXXXXX XXXXXX XXXXXXXX XX XX XXXX", "X XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX XX XXXX", "XX XX XXX XXXX", "XX XXXXXXXXXXXXXXXXXXXX XXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" }; HANDLE hStdOut, hBuff; CHAR_INFO buffer[80*25]; hStdOut = GetStdHandle( STD_OUTPUT_HANDLE ); hBuff = CreateConsoleScreenBuffer( GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL ); if ( hBuff == INVALID_HANDLE_VALUE ) { printf( "Creating Buffer failed\n" ); return -1; } if ( !SetConsoleActiveScreenBuffer( hBuff ) ) { printf( "Setting active screen buffer failed\n" ); return -1; } COORD pos = { 0, 0 }; SMALL_RECT rect = { 0, 0, 79, 24 }; int index; for ( int y = 0; y < bufferSize.Y; ++y ) { for ( int x = 0; x < bufferSize.X; ++x ) { index = y*bufferSize.X+x; buffer[index].Char.AsciiChar= data[y][x]; buffer[index].Attributes = FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE; } } if ( !WriteConsoleOutput( hBuff, buffer, bufferSize, pos, &rect ) ) { printf( "Writing buffer content failed\n" ); return -1; } _getch(); SetConsoleActiveScreenBuffer( hStdOut ); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <windows.h> int main() { // Zuerst einmal erzeuge ich ein HANDLE auf den aktiven Konsole Screen Buffer // Damit habe ich also ein Handle mit dem ich auf den Konsolenscreen Buffer zugreifen kann HANDLE hConOut = GetStdHandle ( STD_OUTPUT_HANDLE ); // Jetzt gehe ich an eine bestimmte Cursorposition im Console Screen Buffer COORD CursorPosition; CursorPosition.X = 5; CursorPosition.Y = 5; SetConsoleCursorPosition ( hConOut, CursorPosition ); // Das was in den ConsoleScreenbuffer geschrieben werden soll const char chZeichen = 'X'; // Jetzt schreibe ich an der aktuellen Cursorposition etwas in den CSB WriteConsole ( hConOut, &chZeichen, 1, NULL, NULL ); return 0; } |
Zitat
Allerdings habe ich jetzt ein anderes Problem. Immer wenn ich folgenden Code erstellen lasse bekomme ich an Stelle des X ein Fragezeichen ausgegeben. Ist das ein Unicode Ascii Problem oder mache ich irgendwas falsch? Danke für jede Antwort Wink
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
#include <windows.h> int main() { // Zuerst einmal erzeuge ich ein HANDLE auf den aktiven Konsole Screen Buffer // Damit habe ich also ein Handle mit dem ich auf den Konsolenscreen Buffer zugreifen kann HANDLE hConOut = GetStdHandle ( STD_OUTPUT_HANDLE ); // Jetzt erstelle ich mir ein Array vom Typ CHAR_INFO das 11 Zeichen Breit und 21 Zeichen // Hoch sein soll. CHAR_INFO buffer[11][21]; // Für die Funktion WriteConsoleOutputA erzeuge ich diese Variable vom Typ COORD // die die Größe meines CHAR_INFO buffers angibt COORD bufferSize = {11,21}; // Jetzt fülle ich den CHAR_INFO buffer mit lauter X Zeichen for(int i=0; i<bufferSize.Y; i++) { for(int j=0; j<bufferSize.X; j++) { buffer[i][j].Char.AsciiChar = 'X'; } } // Die obere linke Ecke des Arrays buffer COORD upperLeft = {0,0}; // Der Bereich (die Region) des Console Screen Buffers in den geschrieben werden soll SMALL_RECT ConScrBufReg = {0,0,80,24}; // Nun rufe ich die Funktion WriteConsoleOutputA auf die mein buffer Array in den // aktiven ConsoleScreenBuffer hConOut schreiben soll. WriteConsoleOutputA( hConOut, &buffer, bufferSize, upperLeft, ConScrBufReg ); return 0; } // Ich bekomme folgende Fehlermeldung: // error C2664: 'WriteConsoleOutputA': Konvertierung des Parameters 2 von // 'CHAR_INFO |
Zitat von »"Andreas2"«
C-/C++-Quelltext
1 2 3 4 5 6 7 8 WriteConsoleOutputA( hConOut, &buffer, bufferSize, upperLeft, ConScrBufReg ); return 0; } // Ich bekomme folgende Fehlermeldung: // error C2664: 'WriteConsoleOutputA': Konvertierung des Parameters 2 von // 'CHAR_INFO
C-/C++-Quelltext |
|
1 |
WriteConsoleOutputA( hConOut, const_cast<const CHAR_INFO*>(&buffer[0][0]), bufferSize, upperLeft, ConScrBufReg ); |
C-/C++-Quelltext |
|
1 |
WriteConsoleOutputA( hConOut, const_cast<const CHAR_INFO*>(&buffer[0][0]), bufferSize, upperLeft, &ConScrBufReg ); |
C-/C++-Quelltext |
|
1 |
WriteConsoleOutputA( hConOut, &buffer[0][0], bufferSize, upperLeft, &ConScrBufReg ); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 |
for(int i=0; i<bufferSize.X; i++) { for(int j=0; j<bufferSize.Y; j++) { buffer[i][j].Char.AsciiChar = 'X'; } } |
Werbeanzeige