windows关于非模态框的释放

  非模态对话框是通过new创建的对话框,语法类似于

     Dialog* dialog = new Dialog(parameter);

 这样创建的对话框时在堆上生成的,释放时要用delete

 非模态对话框默认的OnClose只是把对话框隐藏了,并没有关闭。

如果仅仅是Delete指针的话会有内存泄露,因为对话框的资源没有释放。

     如果在对话框内释放的话要重写两个消息响应函数

     OnClose()和 PostNcDestory() 

     添加WM_ON_CLOSE()和 WM_ON_NCDESTORY()分别响应

    WM_CLOSE 和 WM_NCDESTORY消息。

    OnClose()

{

       CDialg::OnClose();

       DestoryWindow();

}

 

PostNcDestory()

{

    CDialg::PostNcDestory();

    delete this;

}

 

执行顺序,先执行OnClose()再执行 PostNcDestory()

如果在对话框外释放,就先调用DestoryWindow(),再delete该指针 。

示例   dialog->DestoryWindow();

         delete dialog;

          dialog = NULL;

(如有疏漏,欢迎指正)

 

    

posted @ 2014-03-06 10:21  code-everything  阅读(438)  评论(0编辑  收藏  举报