【问题标题】:How to create and free a TCanvas when you have the handle?有句柄时如何创建和释放 TCanvas?
【发布时间】:2014-10-25 12:09:08
【问题描述】:

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

【问题讨论】:

  • 如有疑问,请查看HandleAllocated 属性。 TCanvas 是抽象类,它不拥有 DC 句柄,所以是的,你必须 ReleaseDC 清理。
  • 您可以使用TControlCanvas 类,它将为您获取和释放 DC。顾名思义,它的目的是使用内部控件。
  • 就像 TLama 说的,我会使用 TControlCanvas。

标签: delphi canvas


【解决方案1】:

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

来自docs

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    相关资源
    最近更新 更多