码迷,mamicode.com
首页 > 移动开发 > 详细

解决:AppMsg - Warning: calling DestroyWindow in CWnd::~CWnd; OnDestroy or PostNcDestroy in derived class will not be called

时间:2015-08-17 23:34:31      阅读:436      评论:0      收藏:0      [点我收藏+]

标签:

类似的还有:AppMsg - Warning: Destroying non-NULL m_pMainWnd(这是因为你既没有自己delete,也没有调用DestroyWindow)

首先解决第一个,直接列代码:

 1 class SCCApp : public CWinApp
 2 
 3 class CMainWindow : public CFrameWnd
 4 
 5 BOOL SCCApp::InitInstance()
 6 {
 7     m_pMainWnd = new CMainWindow;
 8     if (!::RegisterHotKey(m_pMainWnd->GetSafeHwnd(), 0x0001, NULL, VK_F1))
 9     {
10         ::MessageBox(NULL, _T("注册F1热键失败!请关闭热键冲突的程序并重启本程序!"),
11             _T("错误"), MB_ICONERROR);
12         delete m_pMainWnd;
13         return FALSE;
14     }
15     m_pMainWnd->ShowWindow(m_nCmdShow);
16     m_pMainWnd->UpdateWindow();
17     return TRUE;
18 }

12行,你直接delete,但该window不会收到WM_DESTROY and WM_NCDESTROY消息,所以无法正确的销毁,替换为:

m_pMainWnd->DestroyWindow();

不需要你手动写delete,这是因为虽然CWnd的PostNcDestroy不会调用delete this,但CFrameWnd的PostNcDestroy会调用delete this。你调用完之后m_pMainWnd会变为NULL,你可以在下面加如下代码验证:

if (m_pMainWnd == NULL)
    std::ofstream os("NULL");

最开始我在m_pMainWnd->DestroyWindow()后面用delete m_pMainWnd来验证发现没有报错,就是因为delete NULL没有任何效果。

解决:AppMsg - Warning: calling DestroyWindow in CWnd::~CWnd; OnDestroy or PostNcDestroy in derived class will not be called

标签:

原文地址:http://www.cnblogs.com/qrlozte/p/4738038.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!