我(终于!)find了一种方法来渲染Windows.Forms控件的玻璃上,似乎没有任何主要的缺点,也没有任何大的执行时间。 它的灵感来自Coded的这篇文章 ,它基本上解释了如何在本地重写绘制控件来绘制它们。 我使用这种方法将控件渲染到位图,并使用GDI +和适当的Alpha通道在NativeWindow的绘制区域上绘制。 实现很简单,但可以完善的可用性,但这不是这个问题的重点。 结果是相当令人满意的: 但是,有两个方面需要修改才能真正使用。 双缓冲 ,因为这个叠加图像和真正的控制之间的闪烁频繁和可怕(用自己的代码testing自己)。 将基本控件设置为使用SetStyles(this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true)进行双缓冲SetStyles(this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true)不起作用,但是我怀疑我们可以使它稍微试用一下。 一些控件不起作用 。 我已经能够做出以下工作: 文本框 MaskedComboBox combobox(DropDownStyle == DropDownList) 列表框 CheckedListBox 列表显示 树视图 的DateTimePicker 的MonthCalendar 但我不能让这些工作,虽然我不明白为什么不。 我的教育猜测是,我引用整个控件的实际NativeWindow句柄,而我需要引用它的“input”(文本)部分,可能是一个孩子。 欢迎来自WinAPI专家的关于如何获得input窗口句柄的任何帮助。 combobox(DropDownStyle!= DropDownList) 的NumericUpDown RichTextBox的 但是修复双缓冲将是可用性的主要焦点 。 以下是一个示例用法: new GlassControlRenderer(textBox1); 代码如下: public class GlassControlRenderer : NativeWindow { private Control Control; private Bitmap Bitmap; private Graphics ControlGraphics; […]
现在我自定义我的应用程序的标题栏。 我的目标是在标题栏上添加一个额外的button。 我以前的问题人们告诉我,我可以定制非客户区的方式。 那除了一件小事以外完美地发挥作用 – 发光 ! 我可以在非客户区域发光,但是我不能使它从窗口中散开 。 我也找不到有关这个主题的任何资源。 我看了一下这个示例,并制作了我自己的testing应用程序来调查非客户端绘图设施。 我的应用程序窗口的屏幕截图: 所以你可以看到,当我被边框剪裁时,系统button会从窗口发光。 例如,Skype的窗口在标题栏中有四个自定义button,可以从窗口框架中“发光” 任何人都可以build议我找出把button的光芒从窗口中拉出来的方法吗? 提前致谢! [编辑] 谢谢大家的回答!