gpt4 book ai didi

windows - 更新所有者绘制的控件的最快方法是什么?

转载 作者:可可西里 更新时间:2023-11-01 11:50:31 28 4
gpt4 key购买 nike

我有一个显示数据的所有者绘制的控件。数据随时间变化。我需要找到一种快速的方法来持续更新控件。

我试过使用定时器,但问题是定时器本身的运行速度最多为每秒 65 帧。如果控件的 paint 方法需要时间,fps 会变得很低。

我尝试从控件的绘制方法请求更新 (InvalidateRect),这样它每秒重新绘制控件数百次,但是 UI 的其余部分无法正常工作(例如,按钮未更新,工具提示被卡住等) .

尽快更新所有者绘制控件的正确方法是什么,同时仍保持 UI 响应?

P. S. 我需要这个来使用 GDI,所以我不能使用 OpenGL/Direct3D 来显示我的数据。

最佳答案

如果你想尽可能快地更新它,运行一个不等待输入的消息循环。如果您继续处理消息,UI 将保持响应,但当没有任何消息时,您的控件将继续更新。

伪代码:

while (!fQuit)
{
while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
DispatchMessage(&msg);
RepaintControl();
}

根据您的控件的实现方式,“重绘”功能可能很简单:

RedrawWindow(hwndControl, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW);

如果您发现这会使您的机器停滞不前(虽然多核应该没问题)或者更新太快,您可以使用等待计时器来获得更高分辨率的更新虽然有时仍会屈服于控制。参见 Using Waitable Timer Objects有关可等待计时器的详细信息。

关于windows - 更新所有者绘制的控件的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31039254/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com