OnPaint事件顺序

本文关键字:顺序 事件 OnPaint | 更新日期: 2023-09-27 17:54:08

我开发了一些具有自己的OnPaint -override的组件。

我现在添加了一个状态面板,它被设计成与我的表单的一部分重叠。我使用alpha-blend颜色将的底层控件变灰,并在其上显示文本。

不幸的是,我的一些底层自定义控件将自己绘制在状态栏之后,因此将自己绘制在状态栏上方。调试时,我发现首先调用状态栏上的绘制事件,然后调用底层控件的绘制事件。

我如何确保正确的顺序是使用油漆?

当底层组件绘制自己时,它们前面的组件应该总是自动失效,以便它们重新绘制自己,但这并没有发生。我还调用了状态栏上的SendToFront,但这也没有帮助。因此,我也想知道维持秩序的适当机制是什么,以及核心组件如何处理它。

编辑:我也运行在这个问题:每次运行我的OnPaint -事件我的覆盖变得越来越不透明,因为它绘制与alpha=128-红色一次又一次对自己。

OnPaint事件顺序

为了消除外部因素(如XP, Vista, Win7之间的差异),您可以:

  • 将"状态面板"图形混合到每个控件的OnPaint处理程序中,因此您不需要使用半透明的状态窗口来实现所需的显示。

  • 使用一个不透明的控件(本质上是状态面板),并通过合成来自各个控件的图形来渲染您想要的最终图像,这将消除渲染过程如何操作的任何不确定性。这意味着你必须添加自定义点击处理,但这通常是一个相当微不足道的添加-一个简单的方法是将主要的"显示控件"放在一组不可见的控件(按钮)后面,这样所有的点击处理都可以正常工作,但绘画被委托给单个控件。