Функция SetWindowPlacement неправильно устанавливает размер окна консоли - PullRequest
1 голос
/ 20 сентября 2019

Я пытаюсь установить расположение указанных окон. В настоящее время моя программа работает с большинством приложений (например, Chrome, Notepad), но имеет некоторые неожиданные результаты с консольными окнами .При вызове функции SetWindowPlacement в консольном окне, кажется, есть некоторые дополнительные смещения, добавленные к координате, которую я дал в качестве ввода.Интересно, имеет ли это какое-то отношение к какому-то особому стилю окна консоли.

Я пытался использовать и "rcWork" (координата рабочей области), и "rcMonitor" (координата монитора), и у обоих естьэто дополнительные смещения.

// Get this console window's hWnd (window handle).
IntPtr hWnd = GetConsoleWindow();

// Get information about the monitor (display) that the window is (mostly) displayed on.
// The .rcWork field contains the monitor's work area, i.e., the usable space excluding
var mi = MONITORINFO.Default;
GetMonitorInfo(MonitorFromWindow(hWnd, MONITOR_DEFAULTTOPRIMARY), ref mi);

// Get information about this window's current placement.
var wp = WINDOWPLACEMENT.Default;
GetWindowPlacement(hWnd, ref wp);

// Calculate the window's new position: snap right 
wp.NormalPosition = new RECT()
    {
        Left = mi.rcWork.Left + (mi.rcWork.Right - mi.rcWork.Left) / 2,          
        Top = mi.rcWork.Top,
        Right = mi.rcWork.Right,
        Bottom = mi.rcWork.Bottom
    };

// Place the window at the new position.
SetWindowPlacement(hWnd, ref wp);

Предполагается, что окно занимает всю правую половину экрана, но на самом деле есть некоторое смещение по краю.При манипулировании окнами других типов код работает как положено.Это происходит только с консольными окнами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...