Zmiana rozmiarów okna i bufora konsoli

Stronę tą wyświetlono już: 183 razy

Rozmiar okna konsoli jest liczony dość nietypowo w szerokościach i wysokościach pojedynczego znaku. Dzięki temu można ustawić poprawnie szerokość i wysokość dla bufora pamięci i dla samego okna. Niestety poniższe rozwiązanie przeznaczone jest pod systemy Windows i wymaga ono wykorzystania pliku nagłówkowego windows.h. Oto przykład, jak można zmienić rozmiar bufora pamięci i okna za jednym razem:

Listing 1
  1. HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); // uchwyt standardowego wyjścia
  2. COORD c2; // struktura potrzebna do ustawienia rozmiarów bufora pamięci
  3. c2.X = 120; // szerokość na 120 szerokości znaków
  4. c2.Y = 40; // wysokość na 40 wysokości znaków
  5. SetConsoleScreenBufferSize(handle, c2); // ustawia rozmiar bufora (wyświetlanego tekstu)
  6. SMALL_RECT sr; // struktura wykorzystywana do ustawienia rozmiaru okna
  7. sr.Left = 0; // na zero
  8. sr.Top = 0; // na zero
  9. sr.Right = c2.X-1; // szerokość o 1 mniejsza od bufora
  10. sr.Bottom = c2.Y-1; // wysokość o 1 mniejsza od bufora
  11. SetConsoleWindowInfo(handle,true,&sr); // ustawia rozmiar okna (jednostka to szerokość i wysokość pojedynczego znaku)

Możliwe jest również ustawienie okna zmaksymalizowanego z jednoczesnym ustawieniem maksymalnych dopasowanych do bieżącego ustawienia monitora rozmiarów okna. Oto przykład:

Listing 2
  1. HWND hwnd = GetConsoleWindow(); // pobieranie uchwytu okna konsoli
  2. ShowWindow(hwnd, SW_SHOWMAXIMIZED); // maksymalizacja okna konsoli
  3. HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
  4. COORD c2 = GetLargestConsoleWindowSize(GetStdHandle(STD_OUTPUT_HANDLE)); // zwracanie maksymalnych rozmiarów
  5. SetConsoleScreenBufferSize(handle, c2); // ustawiasz rozmiar bufora
  6. SMALL_RECT sr;
  7. sr.Left = 0;
  8. sr.Top = 0;
  9. sr.Right = c2.X-1;
  10. sr.Bottom = c2.Y-1;
  11. SetConsoleWindowInfo(handle,true,&sr); // ustawiasz rozmiar okna (jednostka to szerokość i wysokość pojedynczego znaku)

Komentarze