c# - 如何在 .NET 中绘制 "on top"的托管控件?

标签 c# .net vb.net drawing

我正在开发一个简单的表单生成器,它托管“实时”.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/

相关文章:

c# - 非泛型类是否可能包含 .NET(C# 或 VB.NET)中的泛型列表?

wpf - Observable 集合的多个 View

c# - WPF 将 "Menu"键称为什么?

c# - 使用洋葱架构时共享部分放在哪里?

C#方法返回字符串的一部分

.net - 在 Visual Studio 测试资源管理器中分组组织单元测试

c# - 正则表达式用 <br> 标签替换多个换行符

c# - 覆盖 .net Web API 中操作映射和参数的基本功能

c# - 如何在AspNet Core gRPC Service中导入protobuf知名类型

c# - WPF C# 列表框外部滚动按钮