Auf der Konsole Zeichnen z.b eine MenüBar
-
Hey Leute.
Ihr kennt doch sicher sachen wie BIOS oder so...
Die Menü's die es heute in Fenstern gibt gab es früher auch in der Konsole, usw.
Es gibt auch einige BIOS-Module (oder Programme, Versionen k.a.) die so etwas haben.Meine frage jetzt:
1.) Wie kann man so etwas machen?
2.) Also wie kann ich so etwas auf der Konsole Zeichnen?
3.) Kennt ihr da etwas? Tutorials oder so?
4.) Links währen sehr gut, hier direkt gepostet vllt. noch besser.Mfg Wikinger75!
-
Hai!
Kannst du zeichnen in Konsole mit der ASCII-GUI.
Dir steht der gesamte ASCII-Zeichenvorrat von Index 0 bis 255 zur Verfügung, damit kann man so einiges an Menübars etc. verwirklichen. Ist aber verdammt zeitraubend und fummelig.Gruß,
B.B.
-
Hmm...
ASCII-GUI hört sich gut an^^
Gibts auch irgentwo eine Tabelle wo se alle mit Nr. und Bedutung aufgelistet werden?Mfg Wikinger75!
-
Neee, das ist TOP SECRET und unter Verschluß des American Standard Code for Information Interchange Consortium.
Du kannst sie aber überlisten und ein Programm schreiben, das dir die Symbole mit zugehörigen Nummern ausgibt!
-
Will man oft irgendwelche ASCII Gui Sachen malern, bietet sich ein ASCII-Editor an.
Gibts bestimmt schon fertig, oder selber coden. Hier ein Ansatz:#include <windows.h> #include <stdio.h> char* title = "Big Brother's ASCII Editor - Demo"; HANDLE hOut, hIn; INPUT_RECORD ir; typedef int bool; enum{false, true}; #define ConsoleX 80 #define ConsoleY 25 #define EditX 16 #define EditY 16 #define CanvasX 35 #define CanvasY 15 CHAR_INFO editor [ EditX * EditY ]; CHAR_INFO canvas [ CanvasX * CanvasY ]; unsigned char CurrentEditorChar; bool Run; int X, Y; int MouseX, MouseY; int ShowConsoleCursor( bool show ); int SetCursorSize( int size ); int ConsoleEvents(); void GotoXY ( int x, int y ) { COORD pos; pos.X = (short)x; pos.Y = (short)y; SetConsoleCursorPosition( hOut, pos ); } bool PositionValid( int X, int Y ) { return X >= 0 && X <= ConsoleX-1 && Y >= 0 && Y <= ConsoleY-1; } int InitConsole( const char* title ) { if ( ( hIn = GetStdHandle(STD_INPUT_HANDLE) ) == INVALID_HANDLE_VALUE ) return 1; if ( ( hOut = GetStdHandle(STD_OUTPUT_HANDLE) ) == INVALID_HANDLE_VALUE ) return 1; SetConsoleTitle( title ); Run = true; return 0; } int InputLoop() { unsigned long count = 0; while( Run ) { if ( ! ReadConsoleInput( hIn, &ir, 1, &count )) return 1; while( count-- ) { if ( ConsoleEvents(count) ) return 1; } } return 0; } void init_editor() { int i; for ( i=0; i<256; i++ ) { editor[i].Attributes = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; editor[i].Char.AsciiChar = (unsigned char)i; } } void show_editor() { // Coordinates of the screenbuffer rectangle. SMALL_RECT r = {0,0,ConsoleX-1, ConsoleY-1}; // Column-row size of source buffer. COORD bs = {EditX, EditY}; COORD bc = {0}; // Upper-left cell to write from. if ( !WriteConsoleOutput( hOut, editor, bs, bc, &r ) ) puts("WriteConsoleOutput failed!"); } bool editor_hittest() { return MouseX < EditX && MouseY < EditY; } void init_canvas() { int i; for ( i=0; i<CanvasX * CanvasY; i++ ) { if ( !(i%2 )) canvas[i].Attributes = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | BACKGROUND_INTENSITY; else canvas[i].Attributes = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; canvas[i].Char.AsciiChar = 32; } } void show_canvas() { // Coordinates of the screenbuffer rectangle. SMALL_RECT r = {EditX + 20,0, ConsoleX-1, ConsoleY-1}; COORD bs = {CanvasX, CanvasY}; // Column-row size of source buffer. COORD bc = {0}; // Upper-left cell to write from. if ( !WriteConsoleOutput( hOut, canvas, bs, bc, &r ) ) puts("WriteConsoleOutput failed!"); } int main() { int CursorSize = 99; if ( InitConsole( title ) ) return 1; // ShowConsoleCursor( false ); SetCursorSize( CursorSize ); init_editor(); show_editor(); init_canvas(); show_canvas(); InputLoop(); return 0; } int ConsoleEvents() { switch( ir.EventType ) { case MOUSE_EVENT: { // Koordinaten der Maus. Einheiten sind Buchstabenzellen. MouseX = ir.Event.MouseEvent.dwMousePosition.X; MouseY= ir.Event.MouseEvent.dwMousePosition.Y; GotoXY( ConsoleX - 20, ConsoleY-1 ); printf("x: %3d y: %3d", MouseX, MouseY ); GotoXY( MouseX, MouseY ); switch( ir.Event.MouseEvent.dwButtonState ) { case FROM_LEFT_1ST_BUTTON_PRESSED: if ( editor_hittest() ) CurrentEditorChar = (unsigned char)(MouseY * EditX + MouseX); GotoXY( MouseX, MouseY ); putchar(CurrentEditorChar); GotoXY( ConsoleX - 30, ConsoleY-1 ); printf("%c %u", CurrentEditorChar, CurrentEditorChar ); break; case RIGHTMOST_BUTTON_PRESSED: puts("RIGHTMOST_BUTTON_PRESSED\n"); break; } break; }// case MOUSE_EVENT } return 0; } int ShowConsoleCursor( bool show ) { CONSOLE_CURSOR_INFO ci = {0}; if ( ! GetConsoleCursorInfo( hOut, &ci ) ) return 1; ci.bVisible = show; if ( ! SetConsoleCursorInfo( hOut, &ci ) ) return 1; return 0; } int SetCursorSize( int size ) { CONSOLE_CURSOR_INFO ci = {0}; if ( ! GetConsoleCursorInfo( hOut, &ci ) ) return 1; ci.dwSize = size; if ( ! SetConsoleCursorInfo( hOut, &ci ) ) return 1; return 0; }
Brauchste nur noch ne Speicherfunktion, die dir ne Headerdatei aus den ASCII-Gui Elementen erstellt. Die Headerdatei kannste dann in dein Proggie einbinden und so.
Gruß,
B.B.
-
Neee, das ist TOP SECRET und unter Verschluß des American Standard Code for Information Interchange Consortium.
Du kannst sie aber überlisten und ein Programm schreiben, das dir die Symbole mit zugehörigen Nummern ausgibt!Boar cool^^ Aber das ist doch dan eine Cpyright verletzung xD'
(
)
Jetzt mal ernst :
Danke für den Ansatz.
Werd ich mal ausprobieren und machen!Thx for help.
Mfg Wikinger75!