MFC使用Create创建创建窗体后释放内存的方法
2015-02-05 11:55
183 查看
当在一个窗口中生成另外一个窗口 时:
CTestDlg *pTd ; 头文件定义
CRect rc;
GetWindowRect(&rc);
CRect rc1;
pTd= new CTestDlg ;
pTd->Create(IDD_123, this);//窗口的ID
pTd->GetWindowRect(&rc1);
pTd->MoveWindow(rc.left+190, rc.top+18, rc1.Width(), rc1.Height());
pTd->ShowWindow(TREU):
以上两句相当于pTd->SetWindowPos(NULL,rc.left+190, rc.top+18, rc1.Width(), rc1.Height(),SWP_HIDEWINDOW);
//结束时
delete pTd;
pTd = NULL;
这样的写法就会出现的Warning: calling DestroyWindow in CDialog::~CDialog --,正确的做法如下:
//结束时应该
if(pTd)
{
pTd->DestoryWindow();
pTd = NULL;
}
//在后生成的窗口类中加如下代码
//添加消息PostNcDestory
void CTestDlg ::PostNcDestroy()
{
// TODO: 在此添加专用代码和/或调用基类
delete this;//这个一定要
CDialog::PostNcDestroy();
}
CTestDlg *pTd ; 头文件定义
CRect rc;
GetWindowRect(&rc);
CRect rc1;
pTd= new CTestDlg ;
pTd->Create(IDD_123, this);//窗口的ID
pTd->GetWindowRect(&rc1);
pTd->MoveWindow(rc.left+190, rc.top+18, rc1.Width(), rc1.Height());
pTd->ShowWindow(TREU):
以上两句相当于pTd->SetWindowPos(NULL,rc.left+190, rc.top+18, rc1.Width(), rc1.Height(),SWP_HIDEWINDOW);
//结束时
delete pTd;
pTd = NULL;
这样的写法就会出现的Warning: calling DestroyWindow in CDialog::~CDialog --,正确的做法如下:
//结束时应该
if(pTd)
{
pTd->DestoryWindow();
pTd = NULL;
}
//在后生成的窗口类中加如下代码
//添加消息PostNcDestory
void CTestDlg ::PostNcDestroy()
{
// TODO: 在此添加专用代码和/或调用基类
delete this;//这个一定要
CDialog::PostNcDestroy();
}
相关文章推荐
- //创建的HDC 释放后无法释放内存解决方法
- WCE下创建MFC的COM对象及使用方法(一)
- C++之二叉树的创建、查找、四种次序的周游遍历方法以及内存的释放
- IOS初学,关于内存的使用和释放,以及对其方法的理解
- 窗体调用 OCX 的使用方法(MFC,WINFORM)
- 使用CreateCompatibleBitmap多次后出现内存不足的解决方法
- 非模式窗体从创建到销毁都需要代码来维护,防止内存未安全释放
- 使用反射实现根据名称动态创建窗体的几种方法。
- C# 使用反射实现根据名称动态创建窗体的几种方法
- 使用dismissModalViewControllerAnimated 不调用dealloc 内存不释放解决方法
- 获得 MDI 窗体创建和释放的方法
- MFC 创建用户界面线程出错 提示内存不足解决方法
- cocos2d使用create_project.py创建项目不成功的解决方法
- 使用反射实现根据名称动态创建窗体的几种方法
- CBRUSH释放、CreateSolidBrush的内存释放与内存泄露问题及其解决方法
- c++基础2:使用VS2010 创建最简单的MFC应用程序窗体
- 使用反射实现根据名称动态创建窗体的几种方法。
- 跟踪由new创建的对象的所未释放的内存资源的方法
- pthread_create创建线程后必须使用join或detach释放线程资源[内存泄漏]
- 使用OpenCv库的MFC程序在退出后报内存泄露 可能解决方法