Zeilenproblem im Vollbildmodus
-
Nabend,
ich habe eine Funktion erstellt, mit der ich ein Zeichen bzw. einen String in bestimmter Farbe an bestimmter Position ausgeben kann. Es gibt kein Problem mit der Funktion, sondern dass Problem besteht darin, den Code im Vollbildmodus auszuführen. Führe ich den Code unter Windows2000 oder Windows XP aus, so habe ich eine Zeilenanzahl von 80, führe ich den Code aber unter Windows NT 4.0 aus, so habe ich eine Zeilenanzahl von 25. Woran liegt dass ?Mein Code:
//Funktion zur Ausgabe von Zeichen an den Bildschirm in bestimmter Farbe und an bestimmter Position
void printcg(char *ptr_ctext, int icolor, int ixpos, int iypos)
{
int i=0;
HANDLE houtput;
WORD *ptr_wcolorbuf=NULL;
int ilength=0;
COORD cscreenpos={ixpos, iypos};
DWORD dresult=0;houtput = GetStdHandle(STD_OUTPUT_HANDLE)
ilength = strlen(ptr_ctext);ptr_wcolorbuf = (WORD*)malloc(sizeof(WORD) * ilength);
for (i=0; i < ilength; i++)
{
ptr_wcolorbuf[i] = icolor;
}WriteConsoleOutputAttribute(houtput, ptr_wcolorbuf, ilength, cscreenpos, &dresult);
WriteConsoleOutputCharacter(houtput, ptr_ctext, ilength, cscreenpos, &dresult);
free(ptr_wcolorbuf);
ptr_wcolorbuf = NULL;
}mfg
hever
-
Bei Windows 2000 hat die Konsole einen Fensterpuffer (Eigenschaften > Layout)!
Bei NT 4.0 gab's das wohl noch nicht. Ist aber nur eine Vermutung
-
Führe ich den Code unter Windows2000 oder Windows XP aus, so habe ich eine Zeilenanzahl von 80, führe ich den Code aber unter Windows NT 4.0 aus, so habe ich eine Zeilenanzahl von 25. Woran liegt dass ?
Es steht ja nirgendwo geschrieben, wie groß die Console zu sein hat. Du kannst die Größe auch schnell per "mode" anpassen. Die W2K-Console holst Du so auf 25 Zeilen zurück:
mode con cols=80 lines=25
Du kannst aber die aktuelle Größe per Code ermitteln. Dazu gibt es die API-Funktion GetConsoleScreenBufferInfo.
@flenders
Die NT4-Console hat auch einen ScreenBuffer. Nachdem ich 10 Sekunden in der Hilfe gesucht habe, fand ich folgendes:Windows NT/2000/XP: Included in Windows NT 3.1 and later.
-
moin moin,
danke für die Hilfe. Ich habe jetzt einfach system("mode con cols=80 lines=80"); hinzugefügt und somit verwende ich unter Win2k und unter NT 4.0 die selbe Konsolengröße...danke
hever