我正在维护一些包含以下内容的代码:
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/