004
13.03.2005, 10:58 Uhr
Spacelord
Hoffnungsloser Fall
|
Ich sag ja du brauchst FillConsoleOutputAttribute.
Zitat von MSDN:: |
The SetConsoleTextAttribute function sets the foreground (text) and background color attributes of characters written to the screen buffer by the WriteFile or WriteConsole function, or echoed by the ReadFile or ReadConsole function.
|
FillConsoleOutputCharacter scheint aber direkt in den Puffer zu schreiben und nicht WriteConsole zu nutzen.Insbesondere nutzt FillConsoleOutputCharacter auch das ColorAttribut was zu diesem Zeitpunkt noch in dieser Zelle steht.
Also musst du entweder mit ner (selbstgebastelten) gotoxy an die gewünschte Position springen und dein Zeichen "normal" ausgeben oder du überschreibst in deiner textcolor Funktion gleich die Colorattribute des kompletten ScreenBuffers.
Auf die schnelle zusammen geschustert:
C++: |
#include <windows.h> #include <iostream>
void coutput(char value, int x, int y) { COORD WriteCoord; DWORD dwNumberOfCharsWritten = 1;
WriteCoord.X = x; WriteCoord.Y = y;
FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), value, 1, WriteCoord, &dwNumberOfCharsWritten); }
void mytextcolor(int newcolor) { CONSOLE_SCREEN_BUFFER_INFO csbi; HANDLE hOutput;
if(INVALID_HANDLE_VALUE == (hOutput = GetStdHandle(STD_OUTPUT_HANDLE))) return; if(!GetConsoleScreenBufferInfo(hOutput, &csbi)) return;
SetConsoleTextAttribute(hOutput, (WORD)((csbi.wAttributes & ~0x0F) | ((WORD)(newcolor & 0x0F))));
return; }
void setScreenColor(WORD farbe) { COORD curPos={0,0}; DWORD rueckgabe; CONSOLE_SCREEN_BUFFER_INFO conInfo; GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),&conInfo); DWORD pufferGroesse = conInfo.dwSize.X * conInfo.dwSize.Y; FillConsoleOutputAttribute(GetStdHandle(STD_OUTPUT_HANDLE),farbe,pufferGroesse,curPos,&rueckgabe); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),farbe); }
void gotoxy(int x,int y) { COORD curPos={x,y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),curPos); }
int main() { //entweder //mytextcolor(14); setScreenColor(14); coutput('x', 10, 15);
//oder mytextcolor(25); gotoxy(15,20); std::cout<<'A';
return 0; }
|
MfG Spacelord
Bearbeitung von Spacelord: |
Shit,also das geht mir jetzt aber feste auf den Sack!!
|
-- .....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes. Dieser Post wurde am 13.03.2005 um 10:59 Uhr von Spacelord editiert. |