Delphi 当您拥有句柄时,如何创建和释放TCanvas?

Delphi 当您拥有句柄时,如何创建和释放TCanvas?,delphi,canvas,Delphi,Canvas,我想创建一个TCanvas,这样我可以更容易地绘制。首先,我创建canvasMyCanvas:=TCanvas.create,然后我得到句柄DC:=GetWindowDC(句柄)现在我该怎么做?我应该直接将新句柄分配给canvasMyCanvas.handle:=DC还是应该先销毁现有的MyCanvas.Handle?完成绘图后,我必须释放手柄ReleaseDC(手柄,DC)或者如果我释放画布MyCanvas.free,句柄将自动释放?当您创建TCanvas时,它没有句柄。使用GetWindow

我想创建一个
TCanvas
,这样我可以更容易地绘制。首先,我创建canvas
MyCanvas:=TCanvas.create,然后我得到句柄
DC:=GetWindowDC(句柄)现在我该怎么做?我应该直接将新句柄分配给canvas
MyCanvas.handle:=DC
还是应该先销毁现有的
MyCanvas.Handle
?完成绘图后,我必须释放手柄
ReleaseDC(手柄,DC)
或者如果我释放画布
MyCanvas.free
,句柄将自动释放?

当您创建
TCanvas
时,它没有句柄。使用
GetWindowDC
返回的DC分配句柄。销毁画布时,句柄不会被销毁。您需要显式调用
ReleaseDC

从:

TCanvas不拥有HDC。应用程序必须创建HDC并设置句柄属性。当画布不再需要HDC时,应用程序必须释放它。设置已具有有效HDC的画布的句柄属性不会自动释放初始HDC


如有疑问,请查看
HandleAllocated
属性
TCanvas
是一个抽象类,它没有DC句柄,因此是的,您必须在清理时
ReleaseDC
。您可以使用
TControlCanvas
类,它将为您获取和释放DC。顾名思义,它的用途是使用内部控件。