gpt4 book ai didi

c++ - 如何在 WTL 中删除指向无模式对话框的指针

转载 作者:可可西里 更新时间:2023-11-01 14:13:55 30 4
gpt4 key购买 nike

在 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 中执行 delete this——一个在盒子的非客户区被销毁后调用的函数。

但那是在 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

关于c++ - 如何在 WTL 中删除指向无模式对话框的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11336873/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com