Центральное положение окна консоли - C#
Формулировка задачи:
Здравствуйте!
Подскажите пожалуйста...
Вот в консольном C#(Microsoft Visual Studio 2012) есть в свойствах Console метод SetWindowPosition(задаёт положение окна относительно размеру окна). В описании посылаемых параметров к этому методу было указано, что это параметры left и top(т.е. по ширине и по высоте)).
Я бы хотел сделать так, чтобы консольное окно находилось по центру, однако, здесь есть одна проблема:
Когда я пишу, для примера (1920/2 - Console.Width / 2) в left, и аналогично для top, мне выдаёт ошибку, мол "положение окна следует задавать таким образом, чтобы размер текущего окна не превышал размер буфера консоли. Запрещено указывать отрицательные числа". Ну, допустим... Даже если я поменяю буферный размер окна, ничего не поменялось...
Подскажите пожалуйста... Как сделать так, чтобы консольное окно всегда при включении программы находилось по центру экрана...
P.S. Я ранее хотел узнать центр. положение через стандартную формулу(разрешение экрана / 2 - разрешение окна / 2). Но, я так и не смог получить разрешение монитора... Если не трудно-подскажите пожалуйста, как и это сделать...
P.S. 2. Console.SetBufferSize - определяет лишь размерность внутри консоли, т.е. сколько текста может поместится в консоль до перехода на след. строку...
Вот с SetBufferSize всё нормально, а вот с SetWindowSize - вот такая ошибка... Дабы не создавать много тем, если не трудно, подскажите пожалуйста, как изменить размер консоли(для примера, на 800х400(не кол-ство символов на экране, а по кол-ству точек)...
Решение задачи: «Центральное положение окна консоли»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace Program1 { class Program { [StructLayout(LayoutKind.Sequential)] public struct RECT { public int Left; public int Top; public int Right; public int Bottom; } /* Возвращает хэндл (указатель) нашего окна IntPtr hWnd*/ [DllImport("User32.dll", SetLastError = true)] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); /* Устанавливаем окно по его указателю в нужное место */ [DllImport("user32.dll", EntryPoint = "SetWindowPos")] public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags); /* Получаем крайние точки окна */ [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect); static void Main(string[] args) { Console.Title = "WinAPI"; /* Получили указатель на нашу консоль */ var hWnd = FindWindow(null, Console.Title); var wndRect = new RECT(); /* Получили ее размеры */ GetWindowRect(hWnd, out wndRect); var cWidth = wndRect.Right - wndRect.Left; var cHeight = wndRect.Bottom - wndRect.Top; /* Флаг - означает что при установке позиции окна размер не менялся */ var SWP_NOSIZE = 0x1; /* Окна выше остальных */ var HWND_TOPMOST = -1; var Width = 1366; var Height = 768; /* Установка окна в нужное место */ SetWindowPos(hWnd, HWND_TOPMOST, Width / 2 - cWidth / 2, Height / 2 - cHeight / 2, 0, 0, SWP_NOSIZE); Console.ReadKey(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д