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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.5 из 5
Похожие ответы