在MainDlg函数中

LRESULT CMainDlg::OnDo(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{

    CMyDlg* dlg = new CMyDlg;// it could be CMainDlg member var
    //dlg.pMain = this; // i want to SendMessage(pMain.m_hWnd...) in CMyDlg...but it don't
    //  work...
    dlg->Create(m_hWnd);
    dlg->ShowWindow(SW_SHOW);
    return 0;

}

在CMyDlg中
 class CMyDlg : public CDialogImpl<CMyDlg>, public CUpdateUI<CMyDlg>,
public CMessageFilter, public CIdleHandler,
public CWinDataExchange<CMyDlg>,
public CDialogResize<CMyDlg>


LRESULT CMyDlg::OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL&   /*bHandled*/)
{
    DestroyWindow();

 }

因此CMyDlg * dlg指针将丢失...(内存泄漏)

我谷歌的模型对话框。注意该消息在msdn.com

http://msdn.microsoft.com/en-us/library/zhk0y9cw(VS.80).aspx

注意:此示例使用一种非常简单的机制:它在PostNcDestroy中执行删除操作,该功能在包装箱的非客户区域被破坏之后被调用。

但这在MFC中。我将其用于WTL。删除时它会被断言
virtual ~CWindowImplRoot()
{
  #ifdef _DEBUG
    if(m_hWnd != NULL)  // should be cleared in WindowProc
    {
        ATLTRACE(atlTraceWindowing, 0, _T("ERROR - Object deleted before window was destroyed\n"));
        ATLASSERT(FALSE);
    }
  #endif //_DEBUG
}

所以:

删除指向无模式对话框的指针的正确方法是什么?

谢谢您的帮助!

完毕:

http://tech.groups.yahoo.com/group/wtl/message/4444

OnFinalMessage与WTL等效于MFC的PostNCDestroy,您可以
安全地让您的框架窗口“自杀” :)
void CSetRecordInfoDlg::OnFinalMessage( HWND /*hWnd*/ )
{
    delete this;
 }

那个有效!

最佳答案

OnFinalMessage与WTL等效于MFC的PostNCDestroy,您可以
安全地将您的框架窗口“自杀”到那里。

引用:
http://tech.groups.yahoo.com/group/wtl/message/4444

10-07 20:50