在打开模式对话框后,发现gdi数目对象增加,关闭后,gdi对象数目恢复在打开非模式对话框后,发现gdi数目对象增加,关闭后,并没有恢复那如何才能让非模式对话框的gdi对象资源自动释放,我说的是对话框本身的gdi并不是我申请的

解决方案 »

  1.   

    关闭只是对话框被隐藏了.要删除,要调用 DestroyWindow()
      

  2.   

    模式对话框关闭用ENDDIALOG非模式对话框关闭用DESTROYWINDOW
      

  3.   

    如果你使用 CGidObject 派生的 GDI 对象的话是可以自动析构的,分配的东东在 对话框析构中 DeleteObject 也可以
      

  4.   

    Override CWnd::PostNcDestroy() in your dialog class to delete the dialog box object:    virtual void CModeless::PostNcDestroy() {delete this;} 
    PostNcDestroy() is a virtual member function of the CWnd class that is called by the OnNcDestroy() function. 
      

  5.   

    我已经重载了PostNcDestroy(),在里面添加了delete this;内存泄露已经去处
    现在的问题时每次我打开对话框,gdi对象就增加,关闭后并没有恢复原值to krh2001(边城浪子)关闭对话框时,我在OnClose消息里调用了OnCancle,这样也还需要调用DestroyWindow吗?
    还有你说的关闭时隐藏是什么意思,如果隐藏的话,那我PostNcDestroy岂不没有作用了
      

  6.   

    不要对无模式对话框调用OnOK和OnCancel,因为两者都调用EndDialog,重载OnCancel,在里面调用DestroyWindow() ;
      

  7.   

    ywfscu(乌雕) ( ) 为什么“不要对无模式对话框调用OnOK和OnCancel”,实际上两者都调用EndDialog后,就会销毁对话框,即在里面执行了DestroyWindow()的功能,这样,gdi的资源不是就给释放了吗!楼主可以测试看看。
      
     
      

  8.   

    问题已经解决,我在关闭时调用了一次DestroyWindow()就行了谢谢大家!!!!!!