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

4
我想创建一个 TCanvas 以便更轻松地绘制。首先我创建画布 MyCanvas:=TCanvas.Create;,然后获取句柄 DC:=GetWindowDC(Handle); 现在应该做什么呢...? 我应该直接将新句柄分配给画布吗?MyCanvas.Handle:=DC; 还是应该先销毁现有的 MyCanvas.Handle? 绘图完成后,我必须释放句柄 ReleaseDC(Handle,DC); 或者如果我释放画布 MyCanvas.Free,句柄会自动释放吗?

1
当有疑问时,请检查HandleAllocated属性。TCanvas是抽象类,它不拥有DC句柄,因此在清理时必须使用ReleaseDC - Free Consulting
2
你可以使用 TControlCanvas 类,它会为你获取和释放 DC。它的目的是,正如其名称所示,用于在控件内部使用。 - TLama
就像TLama所说的那样,我会使用TControlCanvas。 - Rudy Velthuis
1个回答

4
创建一个 TCanvas 时,它没有句柄。使用 GetWindowDC 返回的 DC 分配句柄。当你销毁 canvas 时,句柄并不会被销毁。你需要显式地调用 ReleaseDC。根据文档,TCanvas 不拥有 HDC。应用程序必须创建 HDC 并设置 Handle 属性。当 canvas 不再需要 HDC 时,应用程序必须释放 HDC。如果给已经具有有效 HDC 的 canvas 设置 Handle 属性,初始 HDC 将不会自动释放。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接