我正在开发一个简单的表单生成器,它托管“实时”.NET 对象并执行自己的指南(网格)绘图、对象选择等。一切进展顺利,但正如您在下面看到的那样,自定义绘图是不是最佳选择,因为它总是在托管控件后面绘制。
Selection Sample http://img405.imageshack.us/img405/8572/selectsample01.png
如何修改我的绘制逻辑以在所有托管控件的“顶部”绘制?
如果图像在您的 SO View 中丢失,可以在此处查看: http://img405.imageshack.us/img405/8572/selectsample01.png
最佳答案
这不是 Z 顺序问题。问题是您不能在另一个窗口的客户矩形内绘制。您案例中的“文本”窗口。像您的“表单”这样的窗口打开了 WS_CLIPCHILDREN 样式标志。
我不太确定 Windows 窗体设计器如何设法在控件周围绘制选择句柄。但是当我使用 Spy++ 查看设计器时,我看到列出了两个原本不可见的窗口,它们是设计区域的大小。它们被命名为“OverlayControl”和“AdornerWindow”。我的猜测是,设计者实际上在其中一个窗口(可能是 OverlayControl)上绘制了句柄,并且窗口背景是透明的。
我在 this thread 中使用了类似的技巧,您也许可以利用代码。你也真的应该看看这个 magazine article.
关于c# - 如何在 .NET 中绘制 "on top"的托管控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2456038/