Ausgabe (cout) an bestimmten Koordinatenpunkten (?)



  • Hallo ihr Lieben,

    ich bin gerade am überlegen ob man bei einem Konsolenprogramm (habe wxdef) den Punkt der Ausgabe möglichst einfach bestimmen kann?! z.B. Ausgabe unten rechts in dem Konsolenfenster...

    Hab mal sowas gehört, bin mir aber nicht mehr sicher wie das ganze heisst und ich habe erstrecht keine Ahnung, wie ich das schreibe.. 😞

    Könnt ihr mir kleinen Vollnoob helfen? Ich bin ganz am Anfang und habe keine große Ahnung von C++. Ich hab schonmal das eine oder andere KLEINE Konsolen-Programm geschrieben z.B. Lottozahlen mit Arrays.

    Vielen Dank schonmal...

    LG Spessy



  • Welches OS?



  • Du meinst du willst die Ausgabeposition angeben (z.B. "Hallo Welt" an Pixel x/y) ?!

    Das geht mit Standard-C++ nicht.
    Mit der WINAPI geht das dann schon wieder, guck da mal ins entsprechende Unterforum und such mal nach Improved Console.



  • Belli schrieb:

    Welches OS?

    Win7

    Ich bin mir ziemlich sicher das das mit wxDev-C++ geht 😮

    HHmmm...in der Theorie hoffe ich das es nur ein zusätzlicher Ausgabebefehl sein wird...



  • #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    void SetCursorPosition(int x, int y)
    {
        COORD pos = {x, y};
    
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
    }
    
    int main(int argc, char **argv)
    {
       SetCursorPosition(50, 1);
       cout << "oben rechts";
    
       SetCursorPosition(1, 10);
       cout << "Mitte links";
    
       SetCursorPosition(50, 20);
       cout << "unten rechts"; 
    }
    


  • Belli schrieb:

    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    void SetCursorPosition(int x, int y)
    {
        COORD pos = {x, y};
       
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
    }
    
    int main(int argc, char **argv)
    {
       SetCursorPosition(50, 1);
       cout << "oben rechts";
        
       SetCursorPosition(1, 10);
       cout << "Mitte links";
       
       SetCursorPosition(50, 20);
       cout << "unten rechts"; 
    }
    

    Ohhhh, das sieht ja mal richtig gut aus....vielen Dank 😘

    Kann mir das noch einer erklären? Ich guck parallel bei youtube nach nem guten tutorial-video

    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);

    Da hab ich noch Verständnissprobleme

    Vielen vielen Dank...



  • Spessy schrieb:

    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);

    Da hab ich noch Verständnissprobleme

    http://msdn.microsoft.com/en-us/library/windows/desktop/ms686025(v=vs.85).aspx



  • Ich verstehe das immernoch nicht so ganz...

    Wenn ich ehrlich bin, dann verstehe ich alles über der int main nicht. Klar das es eine Funktion ist, aber was bedeutet:

    (GetStdHandle(STD_OUTPUT_HANDLE), pos)

    Ich kenne diese Ausdrücke nicht...und google schmeißt mir nur Sachen aus, die mich noch mehr verwirren... 😞



  • void SetCursorPosition(int x, int y)
    {
        COORD pos = {x, y};
    
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
    }
    

    COORD ist eine struct, die irgendwo aus windows.h herkommt

    sie sieht vereinfacht so aus (das ist nicht ganz korrekt, aber egal)

    struct COORD {
      short X;
      short Y;
    };
    

    GetStdHandle

    Mit GetStdHandle bekommst du ein Windows Handle zu einem der 3 wichtigen Streams der Console:

    stdin      (cin)     STD_INPUT_HANDLE
    stdout     (cout)    STD_OUTPUT_HANDLE
    stderr     (cerr)    STD_ERROR_HANDLE
    

    In diesem Fall STD_OUTPUT_HANDLE, also die ganz normale Ausgabe.
    Dieses Handle brauchst du für die Funktion:

    SetConsoleCursorPosition

    Diese verlangt zu einem das Handle (siehe oben) und eine Position in Form der COORD Struktur, die darüber erstellt wird.

    Da du nun alles für die Funktion hast, kannst du sie aufrufen um den Cursor zu verschieben.



  • Jo, TimO6TR hat das ja schon ganz schön erklärt.
    Also GetStdHandle ist auch eine Funktion, die einen Parameter bekommt und ein Handle zu einem Stream zurückliefert. Der Parameter ist in diesem Fall ein Makro, das irgendwo in den Tiefen der Headerdateien, die von windows.h eingebunden werden, definiert ist. Ebenso verhält es sich mit der Definition der Struktur COORD.

    Hier
    http://msdn.microsoft.com/en-us/library/windows/desktop/ms682073(v=vs.85).aspx
    ist eine Auflistung der Konsolefunktionen von Windows-Systemen. Von dort aus solltest du alle Informationen zu dem obigen Codefetzen finden können.

    Wenn Du dann noch konkrete Fragen hast, bist Du möglicherweise im WinAPI - Forum besser aufgehoben.


Log in to reply