我正试图想出一种在C#中的Windows窗体中制作非矩形按钮的方法。我一直在寻找这个,并且有很多关于如何使按钮外观非矩形的教程(包括微软自己的文档),但是 - 这很关键 - 它们都没有做任何关于使按钮的活动区域非矩形。例如,如果您创建一个椭圆形按钮,则边界矩形的角仍然是用于拾取鼠标事件(如翻转和点击)的内容。这对我的需求是不可接受的。我需要在彼此相邻的地方放置几个奇形状的按钮,它们的边界可能会重叠,但它们只应对按钮图形可见部分内的点击做出响应。我已经看到了其他几种语言(主要是Objective-C)的几个问题,但C#没有。这甚至可以用Winforms吗?
答案 0 :(得分:6)
Win32窗口始终是矩形的。但是,如果使用SetWindowRgn
,则完全可以在窗口中显示“洞”。还有"Layered Window" APIs。
然而,您可能无法从纯WinForms执行此操作。期望达到p / invoke。
看起来你可以从纯WinForms中做到这一点:只需设置Control.Region
属性。
可以使用更完整的示例on MSDN