C# - Szöveg kurzor pozícionálása konzol ablakban

Konzol alkalmazások 2. rész

forráskód letöltése
Konzol alkalmazások készítésénél általában a karaktereket csak egymás mellé tudjuk írni és maximum egy új sor kezdésével törhetjük meg a monoton adatközlést. A lehetőség viszont adott arra, hogy tetszőleges, általunk meghatározott x, y koordinátára írjunk karaktereket, vagy pozícionáljuk a kurzort az adatbevitelhez. Ezzel elérhetjük azt is például, hogy egy tetszőleges keretet rajzolunk az adatbevitelhez.
Ezen funkció eléréséhez is a Kernel32.dll függvényeire lesz szükségünk, így ezeket külsőként deklaráljuk a Win32 osztályunkban. A SetConsoleCursorPosition függvény segítségével tudjuk a kurzor pozícióját beállítani. Első paraméterben a konzol azonosítóját, másodikban a kurzor pozíciót kell megadnunk.
Szükségünk lesz még a GetConsoleScreenBufferInfo függvényre is, mellyel lekérdezhetjük a konzol ablak méretét.
Készítünk egy MoveCursor nevű függvényt, mely képes a konzol ablakban, a paramétereiben megadott x, y koordinátára állítani a kurzort.
Ehhez elsőként lekérdezzük az ablak méreteit, hogy megtudjuk mekkora lehet a legnagyobb x és y koordináta.
    public static void MoveCursor(int x, int y)
    {
      CONSOLE_SCREEN_BUFFER_INFO strConsoleInfo = new CONSOLE_SCREEN_BUFFER_INFO();
      GetConsoleScreenBufferInfo(hStdConsoleOutput, ref strConsoleInfo);
A beállítás előtt ellenőrizzük, hogy a kért x, y koordináta még belül van-e az ablakban, hiszen csak ekkor van értelme a beállításnak.
      if (!(x >= strConsoleInfo.dwSize.x ||  x < 0 || y >= strConsoleInfo.dwSize.y || y < 0))
      {
Ha ez a feltétel sikerül, akkor már csak a SetConsoleCursorPosition függvényt kell meghívnunk átadva a szükséges x, y koordinátát.
        COORD Location;
        Location.x = (short)x;
        Location.y = (short)y;
        SetConsoleCursorPosition(hStdConsoleOutput, Location);
      }
    }
Készítünk még egy WriteAt nevű függvényt is, mellyel egy megadott x, y koordinátára tudunk szöveget írni. Ehhez a már meglévő MoveCursor függvényünket használjuk fel és a Consol osztály Write függvényét.
    public static void WriteAt(int x, int y, string text)
    {
      MoveCursor(x, y);
      Console.Write(text);
    }

Konzol alkalmazások cikksorozat