C# - Kurzor tulajdonságok, fejléc szöveg kezelése konzol ablakban

Konzol alkalmazások 3. rész

forráskód letöltése
Soron következő részben azt vizsgáljuk meg, hogy miként olvashatjuk, írhatjuk a konzol ablak fejlécének szövegét, illetve miként változtathatjuk meg, rejthetjük el a szövegkurzort.
A könnyebb használat kedvéért készítünk három property-t a Win32 osztályunkban, melyeken keresztül az alábbi feladatokat oldhatjuk meg:
  • Title - a konzol ablak fejléc szövegének olvasása, írása
  • CursorVisible - a szöveg kurzor láthatóságának olvasása, megváltoztatása
  • CursorHeight - a szöveg kurzor magasságának olvasása, megváltoztatása
A Title property értékének kiolvasásakor a GetConsoleTitle függvényt kell használnunk, mely hasonlóan az eddigiekhez a Kernel32.dll-ben található. A függvény első paraméterében kapjuk vissza a fejléc szövegét, míg a másodikban azt kell megadnunk, hogy az átadott első paraméter maximum hány karaktert képes tárolni.
    public static string Title 
    {
      get
      {
        StringBuilder title = new StringBuilder(TITLE_LENGTH);
        GetConsoleTitle(title, TITLE_LENGTH);
        return title.ToString();
      }
A fejléc szöveg megváltoztatásakor a SetConsoleTitle függvényt használhatjuk. Ennek egyetlen paraméterében egyszerűen meg kell adnunk az új fejléc szöveget.
      set 
      {  
        if (value.Length<TITLE_LENGTH)
        {
          SetConsoleTitle(value);
        }
      }
    }
A kurzor láthatóságát a GetConsoleCursorInfo függvény hívásával határozhatjuk meg. Az eredményt egy CONSOLE_CURSOR_INFO struktúrában kapjuk meg, sok más adattal együtt. A lekérdezés futtatása után az eredmény bVisible mezőjét kell kiolvasnunk.
    public static bool CursorVisible
    {
      get
      {
        CONSOLE_CURSOR_INFO ConsoleCursorInfo = new CONSOLE_CURSOR_INFO();
        GetConsoleCursorInfo(hStdConsoleOutput, ref ConsoleCursorInfo);
        return ConsoleCursorInfo.bVisible;
      }
Amennyiben a láthatóságot szeretnénk megváltoztatni, akkor első lépésként szintén a GetConsoleCursorInfo függvényt használjuk annak érdekében, hogy legyen egy feltöltött CONSOLE_CURSOR_INFO struktúránk. Ennek a struktúrának a bVisible mezőjét ezek után tetszés szerint megváltoztatjuk, majd a SetConsoleCursorInfo függvényt felhasználva beállítjuk az új értékeket a konzol ablakra.
      set
      {
        CONSOLE_CURSOR_INFO ConsoleCursorInfo = new CONSOLE_CURSOR_INFO();
        GetConsoleCursorInfo(hStdConsoleOutput, ref ConsoleCursorInfo);
        ConsoleCursorInfo.bVisible = value;
        SetConsoleCursorInfo(hStdConsoleOutput, ref ConsoleCursorInfo);
      }
    }
A kurzor magasságát a fentiekhez hasonlóan tudjuk lekérdezni, illetve beállítani, a különbség csupán annyi, hogy a CONSOLE_CURSOR_INFO struktúrának most a dwSize mezőjét kell használnunk.
    public static int CursorHeight
    {
      get
      {
        CONSOLE_CURSOR_INFO ConsoleCursorInfo = new CONSOLE_CURSOR_INFO();
        GetConsoleCursorInfo(hStdConsoleOutput, ref ConsoleCursorInfo);
        return ConsoleCursorInfo.dwSize;
      }
A dwSize mező értéke 1 és 100 közé kell, hogy essen. Minél nagyobb számot adunk meg, annál magasabb lesz a szövegkurzor.
      set
      {
        if (value >= 1 && value <= 100)
        {
          CONSOLE_CURSOR_INFO ConsoleCursorInfo = new CONSOLE_CURSOR_INFO();
          GetConsoleCursorInfo(hStdConsoleOutput, ref ConsoleCursorInfo);
          ConsoleCursorInfo.dwSize = value;
          SetConsoleCursorInfo(hStdConsoleOutput, ref ConsoleCursorInfo);
        }
      }
    }
Az elkészült függvények felhasználása most egyszerű:
    static void Main(string[] args)
    {
      Console.WriteLine(Win32.Title);
      Win32.Title = "Software Online példaprogram © 2002 (http://www.SoftwareOnline.hu)";
      Console.WriteLine(Win32.CursorHeight.ToString());
      Win32.CursorHeight = 75;
      Console.ReadLine();
    }

Konzol alkalmazások cikksorozat