gpt4 book ai didi

delphi - RestoreDC之后我需要调用TCanvas.Refresh吗?

转载 作者:行者123 更新时间:2023-12-03 15:29:45 24 4
gpt4 key购买 nike

我正在维护一些包含以下内容的代码:


Canvas.Refresh;
SavedDC := SaveDC(Canvas.Handle);
try
// Paint Stuff to the Canvas
finally
RestoreDC(Canvas.Handle, SavedDC);
Canvas.Refresh;
end;

我了解到 TCanvas.Refresh 与组件刷新完全不同。它不会导致任何绘画,它只是 invalidates the Font, Pen, and Brush of the canvas .

我不明白为什么你会在保存 DC 之前调用 .Refresh ,然后在恢复 DC 后调用 .Refresh 。这似乎违背了 SaveDC/RestoreDC 调用的目的。

这些调用的更合理顺序似乎是:


SaveDC(Canvas.Handle)
Canvas.Refresh
try
// Do my painting
finally
RestoreDC(Canvas.Handle, SavedDC);
end;

由于我从未见过或使用过 TCanvas.Refresh 方法,因此我想检查并确保我正确理解了这一点。

最佳答案

这里有一个解释 - http://edn.embarcadero.com/article/27786

在 RestoreDC 之后调用 Refresh 可保证 TCanvas 状态和底层设备上下文之间的同步。

不确定在现代 Windows 版本中是否有必要在 SaveDC 之前调用 Refresh,但这没有什么问题。

我建议保留代码不变。

关于delphi - RestoreDC之后我需要调用TCanvas.Refresh吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4627434/

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