Центральное положение окна консоли - 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();
}
}
}