2010-03-16 52 views
3

我正在制作一个简单的表单构建器,它承载“活”的.NET对象,并为指南(网格),对象选择等执行自己的绘图。事情进展顺利,但正如您在下面看到的,自定义绘画不是完全最佳,因为它总是在托管控件后面绘制。如何在.NET中绘制托管控件的“顶部”?

Selection Sample http://img405.imageshack.us/img405/8572/selectsample01.png

如何修改我的画逻辑画“上面”的所有托管的控制?

如果图像是在您的SO查看它在这里可以查看丢失: http://img405.imageshack.us/img405/8572/selectsample01.png

回答

1

这不是Z顺序问题。问题是你不能在另一个窗口的客户矩形内绘制。您的案例中的“文本”窗口。类似于“窗体”的窗口已打开WS_CLIPCHILDREN样式标志。

我不完全确定Windows窗体设计器如何设法围绕控件绘制选择手柄。但是当我用Spy ++看设计师时,我看到了两个不可见的窗口,它们是设计区域的大小。它们被命名为“OverlayControl”和“AdornerWindow”。我的猜测是,设计师实际上是在其中一个窗口上绘制手柄(OverlayControl),并且窗口背景是透明的。

我在this thread中使用了类似的技巧,您可能可以利用代码。你也真的应该看看这个magazine article.

+0

+1这看起来很有希望。 (明天需要花费几个小时来完成这些概念。)我担心它可能会出现某种重叠的想法,但是自MFC MFC开始我就没有处理过它。希望有一个更简单的.NET解决方案,但这些链接是伟大的线索!非常感谢nobugz!顺便说一下,使用覆盖层也解决了一些其他与设计师有关的问题。 – 2010-03-17 01:58:38

0

从它出现的托管控制仍然集中,这意味着它应该在前面画的屏幕截图。

从托管控件中移除焦点并确保z顺序设置正确。

如果您控制z顺序,那么确保您按照z顺序进行绘画。

如果你没有z顺序,那么你需要实现一个。

+0

我试着改变焦点,但不管我如何设置它,我的绘图仍然出现在其他控件的后面。这些控件托管在我绘制的面板中,所以我不确定我可以使用z顺序做什么。 – 2010-03-16 18:33:23

相关问题