Я искал несколько часов и пробовал много вещей.
У меня прозрачная форма 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);
}
Это результат:
Зеленый квадрат должен полностью закрывать форму с красной рамкой слева.
Я пробовал разные мониторы, я убедился, что масштабирование составляет 100% ( чтоделать, если это не так? ), я пытался передать form.Location
на form.PointToScreen
Что я делаю не так?