Как получить правильную позицию формы Windows относительно дисплея? - PullRequest
0 голосов
/ 19 октября 2018

Я искал несколько часов и пробовал много вещей.

У меня прозрачная форма Windows, и я пытаюсь сделать снимок экрана в пределах этой формы.

По какой-то причине я не могу получить правильную область формы ...

[DllImport("user32.dll")]
public static extern IntPtr GetDC(IntPtr ptr);

[DllImport("user32.dll")]
public static extern bool ReleaseDC(IntPtr hWnd, IntPtr hDC);

private void LocationChanged(object sender, EventArgs e)
{
    var position = form.PointToScreen(Point.Empty);
    bounds = new Rectangle(position, new Size(50, 50));
    DrawRectangle(bounds);
}

void DrawRectangle(Rectangle rect)
{
    IntPtr desktopPtr = GetDC(IntPtr.Zero);
    Graphics g = Graphics.FromHdc(desktopPtr);

    SolidBrush b = new SolidBrush(Color.Green);
    g.FillRectangle(b, rect);

    g.Dispose();
    ReleaseDC(IntPtr.Zero, desktopPtr);
}

Это результат:

enter image description here

Зеленый квадрат должен полностью закрывать форму с красной рамкой слева.

Я пробовал разные мониторы, я убедился, что масштабирование составляет 100% ( чтоделать, если это не так? ), я пытался передать form.Location на form.PointToScreen

Что я делаю не так?

1 Ответ

0 голосов
/ 19 октября 2018

Вы можете попробовать установить свойство form.StartPosition = FormPosition.Manual

https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.form.startposition?view=netframework-4.7.2

...