微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用CreatePen绘制空心矩形?

如何解决如何使用CreatePen绘制空心矩形?

| 由于在绘制小圆角矩形时,在GDI +中使用DrawArc函数不是很准确,因此我改用RoundRect。
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
  Dim hDC As IntPtr = e.Graphics.GetHdc
  Dim rc As New Rectangle(10,10,64,24)
  Dim hPen As IntPtr = Win32.CreatePen(Win32.PenStyle.PS_SOLID,_
                                       ColorTranslator.ToWin32(Color.Green))
  Dim hOldPen As IntPtr = Win32.SelectObject(hDC,hPen)
  Call Win32.RoundRect(hDC,rc.Left,rc.Top,rc.Right,rc.Bottom,10)
  Win32.SelectObject(hDC,hOldPen)
  Win32.DeleteObject(hPen)
  e.Graphics.ReleaseHdc(hDC)
  MyBase.OnPaint(e)    
End Sub
这将绘制一个不错的圆角矩形,但也会用白色笔刷填充该矩形,以擦除我不想删除内容。 如何在不删除矩形内部的情况下绘制此图形?     

解决方法

        在绘制矩形之前,您只需要选择普通空心笔刷即可。使用HOLLOW_BRUSH调用GetStockObject,然后以与选择笔相同的方式将其选择到设备上下文中。     ,        我使用这样的方法。对我来说很好。
private static GraphicsPath CreateRoundRectranglePath(Rectangle rect,Size rounding)
{
    var path = new GraphicsPath();
    var l = rect.Left;
    var t = rect.Top;
    var w = rect.Width;
    var h = rect.Height;
    var rx = rounding.Width;
    var dx = rounding.Width << 1;
    var ry = rounding.Height;
    var dy = rounding.Height << 1;
    path.AddArc(l,t,dx,dy,180,90); // topleft
    path.AddLine(l + rx,l + w - rx,t); // top
    path.AddArc(l + w - dx,270,90); // topright
    path.AddLine(l + w,t + ry,l + w,t + h - ry); // right
    path.AddArc(l + w - dx,t + h - dy,90); // bottomright
    path.AddLine(l + w - rx,t + h,l + rx,t + h); // bottom
    path.AddArc(l,90,90); // bottomleft
    path.AddLine(l,t + h - ry,l,t + ry); // left
    path.CloseFigure();
    return path;
}
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?