【发布时间】:2022-06-17 17:24:15
【问题描述】:
我想知道是否可以在 wxWidgets 中创建循环wxPanel。目前,我知道如何使用以下代码画一个圆:
void Shapes::OnPaint(wxPaintEvent &event)
{
wxPaintDC dc(this);
dc.DrawCircle(170, 230, 35);
}
以上内容按预期创建了一个圆圈。但我希望圈外的多余部分应该被剪掉。基本上,用户应该只能在形状的圆圈部分而不是圆圈之外的任何东西上看到和交互(如点击)。 我的问题是,这在 wxWidgets 中是否可行。如果是,那么有人可以举一个可行的例子。我在网上找不到任何创建圆形 wxPanel 的示例,所以我最终决定自己问。
我从this 书中读到的一种我认为在这里可能会有所帮助的方法是:
设备上下文有一个剪辑区域,可以使用
SetClipping Region设置并使用DestroyClippingRegion清除。不会显示图形 在剪辑区域之外。 这样做的一种用途是绘制一个字符串,以便它 仅出现在特定矩形内,即使字符串可能 超出矩形边界。您可以将剪辑区域设置为 与矩形相同的大小和位置,绘制文本,然后销毁 剪切区域,文本将被截断以适合矩形。
(强调我的)
从上面引用的文字中可以看出,可以设置一个剪切区域,在该区域之外将看不到图形。所以也许这可以帮助在这里达到预期的效果。但我不知道如何在实践中做到这一点。我正在寻找相同的工作演示。
以下是附加的屏幕截图,显示了当前图像并描述了我想要的内容。
【问题讨论】:
-
您看过
shaped示例吗? -
@Igor 是的,我确实在那里尝试过演示。但看起来使用了
wxFrame而不是wxPanel。如果可能,我想创建一个循环wxPanel,最好使用本书上面引用的文本中描述的SetClippingRegion和DestroyClippingRegion方法。如果没有,那么另一种创建循环wxPanel的方法也可以。 -
如果一切都失败了,您可以尝试手动将点击事件处理到面板中,丢弃距离中心一定半径之外的点击。
-
@MichaelSohnen 是的,这是一个很好的解决方法。