Maus im Konsolen fenster IM VOLLBILDMODI ???
-
Also , mir is neulich beim "Spaß Coden" mit der IC was interessantes Passiert -> Ich habe versucht einen Windows Desktop in der Konsole nachzu "zeichnen" , alles noch schön und gut ... dann ... ich hab Das ergebnis betrachten wollen ... im Vollbildmodus ... druecke also auf ALT+ENTER und das ding geht in den Vollbildmodi ... is immernoch normal ... aber ... ich hab jetz meine Maus bewegt UND DAS IS EIN MAUSEZEIGER !! ... so ein fetter schwarzer strich wie ich ihn von DOS kennen ... den ich frei über den ganzen Bildschirm bewegen konnte ... sowas hab ich noch nie gesehen ... is das eine Fehleinstellung meiner Konsole (cmd) oder wurde da ein rudimentärer Maustrieber mit eingebaut ... noch besser wäre wenn ich diese ... Konsolen Maus auch benutzen könnte ... wenn das geht , kann mir einer erklären wie ?
-
schau mal in die faq von dem forum da sind soweit ich weiß ein paar quelltexte zu finden wie man die maus benutzen kann
-
ach nee ... das hilft mir aber auch nicht weiter ... ich will wissen wie man die benutzt und nicht wie man die Tasten anzeigt ... ich mein ... so das man wie in Windows in der Konsole "mobile" Fenster macht die man dann mit der "maus" ziehen kann ...
-
jepp, ist normal, ne. ist ja auch textmodus, ne.
-
was konsole schon sagt da gibts nix mit fenster
dann mist schon die winapi nutzen um fenster zu machen und bist von deiner konsole weg
deine konsole kann nur zeichen ausgeben und soll als "dosumgebung" unter windows dienen
und wie windows selber schon sagt geht es HIER um FENSTER
wenn du also fenster haben willst musst schon di winapi benutzen also entweder die einfache ausgabe in der konsole mit den standart mittel oder über die winapi oder ander libs was sich für anfänger nicht als so einfach erweist
-
also ... ich habe ein Konsoleprogramm ( zur bearbeitung vom Bootmanager oder so ) runtergeladen , da KANN man etwas verschieben ... das wurde ein fenster eingezeichnet ... WENN man auf den "rahmen" geklickt hat ... und die Maus bewegt hat ... HAT sich DIESES fenster BEWEGT ... und ich möchte doch nur erklärt haben wie ich das hinbekomme ... und von der Konsole kome ich nie weg ...
-
na, schreib doch gleich, was du willst! die fenster in der konsole werden einfach gezeichnet und es werden mausereignisse abgefangen.
das geht mit den Konsolefunktionen der winapi. ist sehr fummelig und aufwendig. es gibt aber ach schon fertige bibliotheken. wie hießt die eine noch gleich ... hmmm.. TVision oder so.gruß,
k.
-
naja ... gibt es auch ein artikel in der Knoweledge Base von MS darüber ?
-
C++Laie1 schrieb:
naja ... gibt es auch ein artikel in der Knoweledge Base von MS darüber ?
Keine Ahnung. In der MSDN jedenfalls stehen die Console Functions beschrieben, die sind dein Freund.
-
Hya!
#include <stdio.h> #define LO 201 #define RO 187 #define RU 188 #define LU 200 #define SR 186 #define WR 205 #define LZ 32 /* void chars() { int i; int n=9; for ( i=0; i<255; i++ ) { printf( "%3d %c ", i, i ); if( i>0 && 0==i%n) printf("\n"); } } */ void wnd1() { printf("%c", LO ); printf("%c", WR ); printf("(%c)", 207 ); printf("%c", WR ); printf("%c", RO ); printf("\n"); printf("%c", SR ); printf("%c", LZ );printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", SR ); printf("\n"); printf("%c", SR ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", SR ); printf("\n"); printf("%c", LU ); printf("%c", WR ); printf("%c", WR ); printf("%c", WR ); printf("%c", WR ); printf("%c", WR ); printf("%c", RU ); } void wnd2() { printf("%c", LO ); printf("%c", WR ); printf("%c", WR ); printf("%c", WR ); printf("%c", WR ); // printf("%c", 207 ); printf("%c", 127 ); printf("%c", RO ); printf("\n"); printf("%c", SR ); printf("%c", LZ );printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", SR ); printf("\n"); printf("%c", SR ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", SR ); printf("\n"); printf("%c", LU ); printf("%c", WR ); printf("%c", WR ); printf("%c", WR ); printf("%c", WR ); printf("%c", WR ); printf("%c", RU ); } void wnd3() { printf("%c", LO ); printf("%c", WR ); printf("%c", WR ); //printf("%c", WR ); //printf("%c", WR ); //printf("%c", 207 ); printf("(%c)", 42 ); printf("%c", RO ); printf("\n"); printf("%c", SR ); printf("%c", LZ );printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", SR ); printf("\n"); printf("%c", SR ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", SR ); printf("\n"); printf("%c", LU ); printf("%c", WR ); printf("%c", WR ); printf("%c", WR ); printf("%c", WR ); printf("%c", WR ); printf("%c", RU ); } void wnd4() { printf("%c", LO ); printf("%c", WR ); printf("%c", WR ); printf("[%c]", 127 ); //printf("[%c]", 254 ); printf("%c", RO ); printf("\n"); printf("%c", SR ); printf("%c", LZ );printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", SR ); printf("\n"); printf("%c", SR ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", LZ ); printf("%c", SR ); printf("\n"); printf("%c", LU ); printf("%c", WR ); printf("%c", WR ); printf("%c", WR ); printf("%c", WR ); printf("%c", WR ); printf("%c", RU ); } int main( void ) { wnd1();puts(""); wnd2();puts(""); wnd3();puts(""); wnd4();puts(""); getchar(); return 0; }
-
ja was hat das jetz mit einem Mauszeiger zutun ? ich habe jetz zwar gelernt wie man einige "nicht-erreichbare" Zeichen ausgibt ... aber wie soll/kann ich die mit einer Maus verschieben ?
-
PDcurses herunterladen und tutorials/beispiele nutzen. DANKE
-
C++Laie1 schrieb:
ja was hat das jetz mit einem Mauszeiger zutun ? ich habe jetz zwar gelernt wie man einige "nicht-erreichbare" Zeichen ausgibt ... aber wie soll/kann ich die mit einer Maus verschieben ?
Da du scheinbar keine Bibliotheken benutzen willst, ist das nur eine Anregung, wie man Fenster zeichnen kann.
Bevor du etwas verschieben kannst musst du ja eine Vorstellung davon haben, was verschoben werden soll.
-
Hya!
Das unten stehende Programm demonstriert ein animiertes Fenster innerhalb
des Standard-Konsolenfensters.Zur Vereinfachung und Demozwecken wurde die Abfrage der Mausposition weggelassen.
Bei einem 'richtigen' Fenster würde man die Mauskoordinaten abfragen und
entsprechend das Fenster zeichnen.
In dieser Demo wird das Fenster in der main-Funktion in einer
for-Schleife verschoben.Happy coding,
B.B.#include <stdio.h> #include <windows.h> // Die Console Functions werden gebraucht. // Fensterecken #define LO 201 #define RO 187 #define RU 188 #define LU 200 // Waagerechte und senkrechte Fensterbegrenzung #define SR 186 #define WR 205 // Close Button #define CLOSE 'x' // Konsolenhandle HANDLE hOut; // Die Breite und die Höhe der Konsole in Buchstabenzellen. enum { ConsoleX = 80, ConsoleY = 25 }; // Konsolenpuffer CHAR_INFO ciConsole [ ConsoleX * ConsoleY ]; // Fensterbreite, Fensterhöhe des animierten Fensters. enum { width = 20, height = 10 }; // Fensterpuffer, bzw. -inhalt des animierten Fensters. CHAR_INFO ciWindow [ width * height ]; // Sichert und restauriert einen Ausschnitt aus dem Konsolenpuffer ciCosole :) CHAR_INFO ciConsoleRestore [ width * height ]; // Setzt den Konsolencursor an die Position x, y. int GotoXY ( int x, int y ) { COORD pos; pos.X = x; pos.Y = y; if ( ! SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), pos )) return Err( "Failed on SetConsoleCursorPosition." ); return 0; } // Konsolencursor verstecken. int CursorHide () { CONSOLE_CURSOR_INFO cci = {0}; if ( FALSE == GetConsoleCursorInfo ( hOut, &cci )) return 1; cci.bVisible = FALSE; if ( FALSE == SetConsoleCursorInfo ( hOut, &cci )) return 1; return 0; } // Fehlermeldungen int Err ( char* e ) { CursorHide(); system( "CLS" ); while( !_kbhit() ) { Sleep ( 400 ); GotoXY ( 0, 0 ); SetConsoleTextAttribute( hOut, FOREGROUND_RED ); printf( "%s\n%s", e, "Zum Beenden Taste druecken." ); Sleep ( 400 ); GotoXY ( 0, 0 ); SetConsoleTextAttribute( hOut, FOREGROUND_BLUE|FOREGROUND_GREEN |FOREGROUND_RED|FOREGROUND_INTENSITY ); printf( "%s\n%s", e, "Zum Beenden Taste druecken." ); } return 1; } // Initialisiert das Fenster und setzt Schrift- und Hintergrundfarbe. void InitWindow ( WORD BColor, WORD FColor ) { int x, y; // Fensterecken und 'Close Button' ciWindow[0].Char.AsciiChar = LO; // Ecke links oben; ciWindow[width-2].Char.AsciiChar = CLOSE; // 'Close Button' ciWindow[width-1].Char.AsciiChar = RO; // Ecke rechts oben; ciWindow[width*height-1].Char.AsciiChar = RU; // Ecke rechts unten ciWindow[width*(height-1)].Char.AsciiChar = LU; // Ecke links unten // Hintergrundfarbe, Schriftfarbe for ( y = 0; y < height; y++ ) for ( x = 0; x < width; x++ ) ciWindow[width*y+x].Attributes = BColor | FColor; // Waagerechte Fensterbegrenzung oben for ( x = 1; x < width -2; x++ ) ciWindow[x].Char.AsciiChar = WR; // Waagerechte Fensterbegrenzung unten for ( x = 1; x < width -1; x++ ) ciWindow[width*(height-1)+x].Char.AsciiChar = WR; // Senkrechte Fensterbegrenzungen rechts und links for ( y = 1; y < height-1; y++ ) { ciWindow[width*y].Char.AsciiChar = SR; ciWindow[width*y+width-1].Char.AsciiChar = SR; } } // Konsolencursor maximieren. int CursorMaximize() { CONSOLE_CURSOR_INFO cci = {0}; if ( FALSE == GetConsoleCursorInfo ( hOut, &cci )) return 1; cci.dwSize = 99; if ( FALSE == SetConsoleCursorInfo ( hOut, &cci )) return 1; return 0; } // Konsolencursor anzeigen int CursorShow () { CONSOLE_CURSOR_INFO cci = {0}; if ( FALSE == GetConsoleCursorInfo ( hOut, &cci )) return 1; cci.bVisible = TRUE; if ( FALSE == SetConsoleCursorInfo ( hOut, &cci )) return 1; return 0; } // Legt die Größe des Konsolenpuffers und die Größe des Konsolenfensters fest. int SetConsoleDimension( short x, short y ) { int xmin, ymin, xmax, ymax; SMALL_RECT sr = {0,0,x-1,y-1}; COORD screenBufSize = {x,y}; if ( FALSE == ( SetConsoleScreenBufferSize( hOut, screenBufSize )) ) return Err( "Failed on SetConsoleScreenBufferSize." ); if ( FALSE == SetConsoleWindowInfo( hOut, TRUE, &sr ) ) return Err( "Failed on SetConsoleWindowInfo." ); return 0; } // Zeigt die Member der CONSOLE_SCREEN_BUFFER_INFO an. int PrintConsoleScreenBufferInfo() { // Konsole Infos :) CONSOLE_SCREEN_BUFFER_INFO CSBI; COORD LargestConsoleWindowSize = {0}; COORD xy = { 0, ConsoleY-1 }; DWORD dummy; if ( FALSE == GetConsoleScreenBufferInfo( hOut, &CSBI )) return 1; puts ( "Here is your console screen buffer information:\n" ); printf ( "Size x: %d\n", CSBI.dwSize.X ); printf ( "Size y: %d\n" , CSBI.dwSize.Y ); printf ( "Cursor position x: %d\n", CSBI.dwCursorPosition.X ); printf ( "Cursor position y: %d\n", CSBI.dwCursorPosition.Y ); printf ( "Attributes: %d\n", CSBI.wAttributes ); printf ( "Window position x-left: %d\n", CSBI.srWindow.Left ); printf ( "Window position x-top: %d\n", CSBI.srWindow.Top ); printf ( "Window position x-right: %d\n", CSBI.srWindow.Right ); printf ( "Window position x-bottom: %d\n", CSBI.srWindow.Bottom ); printf ( "Window size max x: %d\n", CSBI.dwMaximumWindowSize.X ); printf ( "Window size max y: %d\n", CSBI.dwMaximumWindowSize.Y ); // Größt mögliche Fenstergröße ( in Buchstabenzellen ) LargestConsoleWindowSize = GetLargestConsoleWindowSize( hOut ); if ( LargestConsoleWindowSize.X && LargestConsoleWindowSize.Y ) { printf ( "Largest size x: %d\n", LargestConsoleWindowSize.X ); printf ( "Largest size y: %d\n", LargestConsoleWindowSize.Y ); } FillConsoleOutputCharacter( hOut, 1, ConsoleX, xy, &dummy ); return 0; } // Kopiert den Inhalt der Konsole in den Puffer ciConsole. int CopyConsoleContent() { COORD dwBufferSize = { ConsoleX, ConsoleY }; COORD dwBufferCoord = { 0, 0 }; SMALL_RECT ReadRegion = { 0, 0, ConsoleX-1, ConsoleY-1 }; if ( FALSE == ReadConsoleOutput( hOut, ciConsole, dwBufferSize, dwBufferCoord, &ReadRegion )) return Err ("ReadConsoleOutput failed."); return 0; } // Liest aus dem Puffer ciConsole ab Position x, y einen rechteckigen Block // der Höhe height und der Breite width und speichert diesen im Puffer // ciConsoleRestore int FillRestoreBuffer( int x, int y ) { COORD dwBufferSize = { width, height }; COORD dwBufferCoord = { 0, 0 }; SMALL_RECT ReadRegion = { x, y, x+width-1, y+height-1 }; if ( FALSE == ReadConsoleOutput( hOut, ciConsoleRestore, dwBufferSize, dwBufferCoord, &ReadRegion )) return Err ("ReadConsoleOutput failed."); return 0; } // Zeichnet den Inhalt von pci in die Konsole an der Position x, y. // pci ist abwechselnd das animierte Fenster ciWindow // und der gesicherte Ausschnitt des Konsolenpuffers ciConsoleRestore int DrawWindow ( int x, int y, CHAR_INFO* pci ) { COORD dwBufferSize; COORD dwBufferCoord = { 0, 0 }; SMALL_RECT WriteRegion; dwBufferSize.X = width; dwBufferSize.Y = height; WriteRegion.Left = x; WriteRegion.Top = y; if ( (width + x) > (ConsoleX -1) ) WriteRegion.Right = ConsoleX -1; else WriteRegion.Right = width + x; if ( (height + y) > (ConsoleY -1) ) WriteRegion.Bottom = ConsoleY -1; else WriteRegion.Bottom = height + y; if ( FALSE == WriteConsoleOutput ( hOut, pci, dwBufferSize, dwBufferCoord, &WriteRegion )) return Err ( "WriteConsoleOutput failed." ); return 0; } // Demo animiertes Fenster :) int main( void ) { int x, y, speed = 500; SetConsoleTitle( "Big Brothers Animated Console Window" ); // Konsolen Output Handle holen. if ( ( hOut = GetStdHandle( STD_OUTPUT_HANDLE ) ) == INVALID_HANDLE_VALUE ) return Err( "GetStdHandle failed." ); // Konsolencursor verstecken. if ( CursorHide () ) return Err( "HideCursor failed." ); // Breite und Höhe der Konsole festlegen. if ( SetConsoleDimension( ConsoleX, ConsoleY ) ) return Err( "SetConsoleDimension failed." ); // Konsoleninfos anzeigen. if ( PrintConsoleScreenBufferInfo () ) return Err( "PrintConsoleScreenBufferInfo failed." ); // Den Inhalt der Konsole in den Puffer ciConsole kopieren. if ( CopyConsoleContent () ) return Err( "CopyConsoleContent failed." ); // Das 'Animationsfenster' initialisieren. Das Aussehen des Fenster wird // im Puffer ciWindow festgelegt. InitWindow ( BACKGROUND_BLUE, // Blauer Hintergrund, weiße Schrift FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY ); // Hier wird das Fenster verschoben und gezeichnet. for ( x = 0, y = 0; y < ConsoleY; x++, y++ ) { if ( FillRestoreBuffer ( x, y ) ) return Err( "FillRestoreBuffer failed." ); if ( DrawWindow ( x, y, ciWindow ) ) return Err( "DrawWindow failed." ); Sleep ( speed ); if ( DrawWindow ( x, y, ciConsoleRestore ) ) return Err( "DrawWindow failed." ); if ( y == ConsoleY-1 ) y = 0; if ( x == ConsoleX-1 ) x = 0; } getchar(); return 0; }