Frage zu nichtmodale Dialoge



  • Hallo Leute,

    ich habe eine CListCtrl in der ich mit der rechten Mausklick ein Menü angezeigt bekomme und daraus ich ein nichtmodales Dialog aufrufe.

    void CMainFrame::OnStatus() 
    {
    	UpdateData(FALSE);
    	m_pderDialog = new CderDialog;
    	m_pderDialog->Create(IDD_DER_DIALOG, this);
    	m_pderDialog->ShowWindow(SW_SHOW);
    	m_pderDialog->setText(m_strText);
    
    }
    

    Beim beenden des Dialoges verwende ich in der Class des Dialoges folgendes...

    void CderDialog::OnSchliessen() 
    {
    DestroyWindow();	
    }
    

    Jetzt meine Frage,
    wenn ich doch das Dialog mit new erstelle, muß ich doch mit delete dies wieder frei geben.

    Reicht da DestroyWindow() ?
    Oder wie macht man das am Besten ??

    Gruß und Danke
    andy_mann



  • Da du dir den Zeiger auf den Dialog in CMainFrame::m_pderDialog speicherst, kannst du es natürlich so machen:

    delete m_pderDialog;
    m_pderDialog = NULL;
    

    Das darfst du natürlich erst nach CderDialog::OnDestroy aufrufen.

    Ein besserer Weg bei nicht-modalen Dialogen ist:

    void CderDialog::PostNcDestroy() 
    {
         delete this;
    }
    

    Danach darfst du natürlich nicht mehr auf CMainFrame::m_pderDialog zugreifen, aber eventuell brauchst du den Zeiger mit dieser Methode sowieso nicht mehr.



  • Vielen Dank,

    Gruß
    andy_mann


Anmelden zum Antworten