如何使使用 CreateGraphics() 创建的图形在控件上始终可见而不会闪烁



我有自定义控件。我在那里定义了 OnPaint() 事件。假设它是一个文本编辑控件。我想显示自定义插入符号覆盖。我用 CreateGraphics() 创建了一个图形对象。如果在每次闪烁计时器滴答声上,我调用绘制插入符号的代码 - 它是可见的。在OnPaint()中绘画后,我的插入符号消失了。它可以重新绘制,但是当我尝试将 DrawCaret() 调用放在主 OnPaint() 处理程序的末尾时,没有任何反应。插入符号未绘制,或已绘制并清除。

在代码中的不同位置强制使用 DrawCaret() 充其量会导致丑陋的闪烁,最坏的情况是不执行任何操作。当我在 blinkTimer_Tick() 事件处理程序中使用 DrawCaret() 时 - 它被绘制了,但它不规则地闪烁。

不,我不想使用 Win32 插入符号 - 它的颜色无法设置。我需要绘制自己的插入符号,它必须闪烁。

如果它必须闪烁,我假设我不能使用控件的 OnPaint() 事件处理程序。

我的错。这似乎是一个非常糟糕的方法。我已将插入符号绘图移至主 OnPaint(),它用作魅力。

我有点担心 Invalidate() 我将每个插入符号称为"眨眼",如果我将插入符号创建为子控件怎么办?更轻还是更重?我想我不会测试它,当前解决方案显示没有 CPU 或 GPU 负载。

最新更新