可以找出正在泄漏的GDI对象是什么

|| 我在Embarcadera RAD Studio 2010(C ++)中有一个应用程序。是否有可能窥视它以查看泄漏GDI对象的原因?当文本设置为粗体时,树状菜单泄漏GDI对象。我的猜测是先创建“原始”文本,然后创建一个实例,该实例以粗体显示,第一个实例被“遗忘”并泄漏。 编辑:由于在AQTime中没有泄漏的报告,即使通过查看Taskmanager得出结论,我也跟踪了正在创建而不释放GDI对象的代码片段。
...

Msg.WParam=(int)PhysicalListView->Canvas->Handle;
PhysicalListView->Dispatch(&Msg);

... 
PhysicalListView是指向TListView的指针。据我了解,以T开头的类是标准Embarcadero类的一部分(对吗?)。 当我在列表视图中选择一个带有未修饰文本的子节点的节点时,一切正常。但是,例如,当一个或多个子级的文本带有粗体或带下划线的文本时,在Dispatch调用后,GDI计数不会减少。 所以我的猜测是这是TListView类中的错误。我不知道这是否适用于WinForms或是否使用它自己的解决方案? 同样,这在调试模式下发生。编译发行版本时,我将检查问题是否消失。如果是这样,则表明TListView的调试版本中存在泄漏。 EDIT2:我认为我已经发现了问题。发送的初始消息包括WM_PAINT,并且在阅读了此消息后,客户端应用程序不应发送此消息,而应由系统使用。因此我将其更改为WM_PRINT,泄漏消失了。我不知道为什么使用WM_PAINT,也许我缺少它的某些功能...他们为什么会使用WM_PAINT的任何想法?     
已邀请:
        AQTime是我选择的工具。它是一个探查器,不仅具有GDI泄漏检测功能,还具有更多功能。 RAD Studio XE带有AQTime的标准版。对于专业版,您需要支付更多费用。     
        您是否尝试过GdiUsage.exe? http://discuss.fogcreek.com/dotnetquestions/default.asp?cmd=show&ixPost=5037&ixReplies=5     
        内存验证器是我们在工作中使用的工具,用于处理所有类型的内存泄漏,包括gdi对象。     

要回复问题请先登录注册