Comment détruire un pointeur sur l'objet CFindReplaceDialog correctement?MFC CFindReplaceDialog destruction
Par exemple, j'ai la classe:
class CjumpView : public CRichEditView
{
CFindReplceDialog *m_pFRDlg;
// ...
};
CjumpView::CjumpView()
: m_pFRDlg(NULL)
{
}
CjumpView::~CjumpView()
{
if(m_pFRDlg != NULL)
{
m_pFRDlg->DestroyWindow();
delete(m_pFRDlg);
}
}
void CjumpView::OnEditFind()
{
if(m_pFRDlg == NULL)
{
const bool fShowFind = true;
m_pFRDlg = new CFindReplaceDialog();
m_pFRDlg->Create(fShowFind, m_sFind, NULL, NULL, this)
}
}
LRESULT CjumpView::OnFind(WPARAM, LPARAM lParam)
{
LPFINDREPLACE lpFindReplace = reinterpret_cast<LPFINDREPLACE>(lParam);
if(lpFindReplace->Flags & FR_DIALOGTERM)
{
m_pFRDlg->DestroyWindow();
delete(m_pFRDlg);
m_pFRDlg = NULL;
return NULL;
}
lpFindReplace->Flags = 0;
return NULL;
}
Dans l'article d'aide Visual Studio CFindReplaceDialog il est dit que les objets de cette classe doivent être créés en tas en utilisant l'opérateur « nouveau ». Ensuite, la fonction Créer un membre doit être appelée. Ma fonction "OnFind" réagit à la fermeture de ce dialogue de recherche. Il appelle la fonction DestroyWindow(), l'objet tente de supprimer la boîte de dialogue. Mais quand j'essaye d'appeler DestoyWindow() dans OnFind() ou dans le destructeur j'ai une exception "Violation d'accès à l'adresse ...". Comment détruire ce dialogue et supprimer le pointeur?