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

Lar*_*ech 1 .net vb.net pinvoke winapi

由于在绘制小圆角矩形时在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, 0, _
                                       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, 10)
  Win32.SelectObject(hDC, hOldPen)
  Win32.DeleteObject(hPen)
  e.Graphics.ReleaseHdc(hDC)
  MyBase.OnPaint(e)    
End Sub
Run Code Online (Sandbox Code Playgroud)

这将绘制一个漂亮的圆角矩形,但它也会用白色画笔填充它,擦除我不想删除的东西.

如何在不擦除矩形内部的情况下绘制它?

Joe*_*sky 6

您只需在绘制矩形之前选择一个库存,空心画笔.使用HOLLOW_BRUSH调用GetStockObject,然后以与选择笔相同的方式将其选择到设备上下文中.