我使用自己的OnPaint
开发了一些组件 - 覆盖我绘制的组件。
我现在添加了一个状态面板,该面板设计为与我的表单的一部分重叠。我使用alpha混合颜色灰色底层控件并在其上显示文本。
不幸的是,我的一些底层自定义控件会在状态栏后自行绘制,因此将自己绘制在状态栏上方。调试我发现首先调用paint事件的状态栏,然后调用底层控件的paint事件。
如何确保使用正确的顺序进行绘画?
当底层组件绘制自己时,它们前面的组件应该总是自动失效,因此它们会自行重绘,但这并不是很好。我还在状态栏上调用了SendToFront
,但两者都没有帮助。所以我也问到维护订单的正确机制是什么以及核心组件如何处理它。
修改:我也遇到了这个问题:每次运行OnPaint
- 事件时,我的叠加层变得越来越不透明,因为它使用 alpha = 128绘制 - 红色一次又一次。
答案 0 :(得分:1)
为了消除外部因素(如XP,Vista,Win7之间的差异),您可以:
将“状态面板”图形混合到其OnPaint处理程序中的每个控件上,因此您无需使用半透明状态窗口来实现所需的显示。
使用一个不透明控件(本质上是状态面板)并通过合成来自各个控件的图形将所需的最终图像渲染到其中,这将消除渲染过程如何操作的任何不确定性。这意味着你必须添加自定义点击处理,但这通常是一个相当简单的补充 - 一个简单的方法是将主要的“显示控件”置于一组不可见的控件(按钮)后面,以便所有点击处理可以正常工作,但绘画被委托给一个控件。