代码之家  ›  专栏  ›  技术社区  ›  pookie

如何获得Windows窗体相对于显示器的正确位置?

  •  0
  • pookie  · 技术社区  · 6 年前

    我找了几个小时,试了很多东西。

    [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

    绿色方块应该完全覆盖表单,左边有红色边框。

    如果不是怎么办? ),我试着通过 form.Location form.PointToScreen

    我做错什么了?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Alberto Espinoza    6 年前