U+2552 und so. Das sind die Rahjmenelemente von alten DOS Programmen:
Hier:
WWWWWWWWWWWW
WWWWWWWWWWWW
WW Doppelte Linie
WWWWWWWWWWWW
WWWWWWWWWWWW
WW
WW
WW
WW
WW
Einfache Linie
Was soll ich jetzt mit U+2555 oder so anstellen? Ich krieg immer 'n "ı"
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.
optional heist bei ansi-c nicht, das man was weglassen kann
long strtol(const cahr *s, char **endp, int base)
hier: endp=NULL und base=10
achja weglassen geht bei variabler parameterliste - beispiel printf()
Mahlzeit!
Ich suche nach einem möglichst einfachen Weg um zwischen zwei screen buffer hin und her zu schalten und die Ausgabe jeweils auf den aktuellen bzw. aktiven buffer umzuleiten. Das hin- und herschalten funktioniert auch (glaube ich), allerdings werden sämtliche Ausgaben im ursprünglichen screen buffer getätigt.
Mein Code bis jetzt:
#include <conio.h> // for getch()
#include <iostream>
#include <windows.h>
using namespace std;
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE hBuffer = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0,
NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
HANDLE hCurrent = hConsole;
HANDLE SwitchOutput(HANDLE hTarget);
int main()
{
printf("Hello world!\n");
getch();
hCurrent = SwitchOutput(hCurrent);
printf("Hello another world!\n");
getch();
hCurrent = SwitchOutput(hCurrent);
printf("Hello again old world!\n");
getch();
return 0;
}
HANDLE SwitchOutput(HANDLE hSwitch)
{
HANDLE hTemp;
if (hSwitch == hConsole)
{
hTemp = hBuffer;
}
else
{
hTemp = hConsole;
}
SetConsoleActiveScreenBuffer(hTemp);
SetStdHandle(STD_OUTPUT_HANDLE, hTemp);
return hTemp;
}
Irgendwas hab ich übersehen oder falsch gemacht, aber ich komm' einfach nicht drauf.
fopen() erzeugt afaik ein neues FILE und gibt dir seine Adresse zurück. Wenn du diese einem vorhandenen FILE* zuweist, ist dessen voriger Inhalt weg (Speicherleck).
aso ich dachte du meintest getchar() als nicht stadardisiert ...,
da geb ich dir recht lieber
cin.clear()
cin.ignore(numeric_limits<streamsize>::max());
cin.get();
benutzen als das system ...
Ich würde sagen du legst einfach ein Hintergrundbild fest,
zb tmp.bmp, das liegt in irgend einen versteckten Ordner.
Und dein Programm tauscht dann nur tmp.bmp aus, das müsste doch
gehen?
@H.E.: dein Verfahren ist erstens unsicher (gets() prüft nicht, ob der Nutzer wirklich die Beschränkung einhält) und zweitens nicht beliebig einsetzbar (du kannst nur um 1 Wert vorwärts verschieben und das große 'Z' wird zu einem kleinen 'a' kodiert. Und drittens wird es mit isalpha() und Kollegen bstimmt kompakter aussehen.
@Tänzer: strlen() zählt alle Zeichen des Strings, bis es auf ein '\0' (Stringende-Marke in C) trifft. Wenn du nur die Buchstaben benötigst, mußt du von Hand zählen ( for(i=0;isaplha(input[i]);++i).. ).
(und wenn du sowieso in einer Schleife über den gesamten String laufen willst, ist die Abfrage "input[i]!='\0'" effektiver als "i<strlen(input)")
Ich würde gerne an einer kleinen Klasse arbeiten die
es ermöglicht Zeichen von der Console zu lesen und diese zu speichern und
dann wieder dazustellen(blitten) oder eben an einer anderen Positionen.
Doch ich weiß leider nicht wie man den Buchstaben und die Farbe von einer bestimmten Position in der Windows Console ermittelt.