对话框右上角 那个X ---------对应着OnClose  为了实现一个功能,点击X时 隐藏对话框,而 点击Cancel时候,真正的退出销毁对话框。
版本1:我重载了它,代码为:void CMyDialog::OnClose() 
{ ShowWindow(SW_HIDE);   //隐藏对话框}然后重载void CMyDialog::PostNcDestroy() 
{

CDialog::PostNcDestroy(); delete this;}
其他什么都不做,OnCancel没有重载,会不会引起泄露内存?  创建对话框是new出来的。
版本2:  重载了三个函数:void CMyDialog::OnClose() 
{ ShowWindow(SW_HIDE);   //隐藏对话框}
void CMyDialog::PostNcDestroy() 
{

CDialog::PostNcDestroy(); delete this;}
void CMyDialog::OnCancel() 
{

DestroyWindow();}
踊跃发言

解决方案 »

  1.   

    对话框右上角 那个X ---------对应着OnClose 为了实现一个功能,点击X时 隐藏对话框,而 点击Cancel时候,真正的退出销毁对话框。
      

  2.   

    响应WM_DESTROY,在这里delete this
      

  3.   

    你只要delete this就不会泄漏,但是我个人觉得放WM_DESTROY里比较好
      

  4.   

    请问:delete this 放在PostNcDestroy 和OnDestroy里面有什么区别?
    为什么放在后者里面较好?
      

  5.   

    Nc代表非客户区,你放哪里也可以吧,但是感觉怪怪的,WM_DESTROY是窗口销毁消息 该消息调用DestroyWindow销毁窗口。
      

  6.   

    你讲的和网上说的差异很大他们都说要放在PostNcDestroy中另外还要在OnCancel加一句:DestroyWindow
      

  7.   


    对于一个问题的解决办法可不止一种  支持chris820313  只要delete了 应该不会有内存泄漏了吧