首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何显式释放应用程序拥有的TForm派生类分配的GDI句柄?

如何显式释放应用程序拥有的TForm派生类分配的GDI句柄?
EN

Stack Overflow用户
提问于 2010-06-24 06:10:49
回答 2查看 707关注 0票数 0

从TForm派生的单个类似乎会一直持有GDI句柄,直到应用程序关闭。

代码语言:javascript
复制
class TTestForm : public TForm {
  public:
    TTestForm(TComponent*);
};

std::auto_ptr<TTestForm> test(new TTestForm(NULL));
test->ShowModal();

我是VCL的新手,所以请耐心听我说。此测试是使用不包含控件的窗体完成的。据我所知,如果没有指定所有者,所有对象都归应用程序所有。

我的应用程序动态地创建(和销毁)许多表单。每次显示表单时,都会分配3-4个新的GDI句柄。有没有办法在应用程序生命周期内显式释放这些GDI句柄?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-16 13:31:56

事实证明,泄漏是由错误设置的TImageList.ShareImages属性引起的。

票数 0
EN

Stack Overflow用户

发布于 2010-07-13 04:39:51

注意:我是一名Delphi程序员,不是C++,但VCL基本上就是VCL。您可以尝试表单的Release()方法,而不是free()。或者,在OnClose事件中设置传递给caFree的操作参数-这应该告诉VCL在窗体关闭时释放窗口资源,而不是隐藏它。

我想另一个问题是--你需要继续创建/销毁表单吗?你能创建它们一次,然后重用它们吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3105940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档