当我想重绘窗口时,InvalidateRect 和 RedrawWindow 之间是否有首选函数可以调用?
例如,这两个调用是否相等:(win 将是 HWND)
RedrawWindow(win, NULL, NULL, RDW_INVALIDATE);
InvalidateRect(win, NULL, NULL);
主要问题: 我什么时候应该使用其中之一?背景中是否存在任何差异? (不同的 WM_messages/焦点/顺序/优先级..)
我想重绘窗口的原因是因为我向它发送了一个我希望它显示的新图像,这意味着窗口的内容不再有效。
InvalidateRect
不会立即重绘窗口。它只是“安排”窗口特定矩形区域的未来重绘。使用InvalidateRect
您可以根据需要安排任意多个区域,使它们积累在一些内部缓冲区中。所有累积的计划区域的实际重绘将在稍后窗口无事可做时进行。 (当然,如果您发出命令时窗口处于空闲状态InvalidateRect
调用,重绘将立即发生)。
您还可以通过调用强制立即重绘所有当前累积的无效区域UpdateWindow
。但是,再次强调,如果您不着急,请明确调用UpdateWindow
没有必要,因为一旦窗口空闲,它将自动对所有当前无效的区域执行重绘。
RedrawWindow
另一方面,是一个具有更广泛和灵活的功能集的函数。它可用于执行失效调度(即相同的事情InvalidateRect
确实)或者它可以用于强制执行指定区域的立即重绘,而不进行任何“调度”。在后一种情况下调用RedrawWindow
实际上相当于调用InvalidateRect
然后立即打电话UpdateWindow
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)