Fenster zerstören

fish-guts

Erfahrenes Mitglied
Moin

Ich bins wieder mal. Der Code ist von einer Treeview selection. Was ich brauche ist ein Pointer, der mir den Fensternamen des aktiven offenen Child Fenster liefert (Jede Selektion im Tree öffnet ein anderes Child, wie ne Tab Control), damit ich dieses zerstören kann. Hat mir jemand einen Tipp?

Code:

Code:
void CDebRegulatorDlg::OnSelect(NMHDR* pNMHDR, LRESULT* pResult) 
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
CTreeCtrl* pCtrl = (CTreeCtrl*) GetDlgItem(IDC_MAINTREE);
ASSERT(pCtrl != NULL);
HTREEITEM hCurSel = pCtrl->GetNextItem(TVI_ROOT, TVGN_CARET);
if (hCurSel == NULL)
MessageBox(_T("There is no selected item"));
else
{
CString str;
str.Format(_T("%s"),
(LPCTSTR) pCtrl->GetItemText(hCurSel));
 
if(str=="Neues Dossier")
{
DestroyWindow(); //hier möchte ich das Fenster zerstören
CNewFile* pNewDlg = new CNewFile();
pNewDlg->Create( CNewFile::IDD );
pNewDlg->SetParent(this);
pNewDlg->SetWindowPos( 0, 158, 0, 0,0, SWP_NOZORDER | SWP_NOSIZE );
pNewDlg->ShowWindow( SW_SHOW );
}
else if(str=="Mandant")
{
DestroyWindow(); //hier möchte ich das Fenster zerstören
CNewClient* pNewDlg = new CNewClient();
pNewDlg->Create( CNewClient::IDD );
pNewDlg->SetParent(this);
pNewDlg->SetWindowPos( 0, 158, 0, 0,0, SWP_NOZORDER | SWP_NOSIZE );
pNewDlg->ShowWindow( SW_SHOW );
}
}
*pResult = 0;
pNMHDR=NULL;
}

Danke und Gruss FG
 
Warum merkst Du dir nicht einfach pNewDlg in einer Membervariablen von CDebRegulatorDlg? Du mußt ja nicht nur das Fenster später zerstören, sondern den mit new angelegten Pointer mit delete wieder löschen.
Code:
// in der Klasse:
     protected:
      CDialog * m_pActiveDialog;
      ...
      //in Deiner Funktion:
      if(m_pActiveDialog != NULL){
           m_pActiveDialog->DestroyWindow;
            delete m_pActiveDialog;
             }
             CNewFile* pNewDlg = new CNewFile();
            pNewDlg->Create( CNewFile::IDD );
            pNewDlg->SetParent(this);
            pNewDlg->SetWindowPos( 0, 158, 0, 0,0, SWP_NOZORDER | SWP_NOSIZE );
            pNewDlg->ShowWindow( SW_SHOW );
           m_pActiveDialog = pNewDlg;

Du kannst aber auch zu Beginn beide Dialoge anlegen und unsichtbar machen (oder nur einen davon sichtbar machen). Die Dialoge bzw. die Zeiger darauf müßtest Du dann natürlich auch als Membervariablen von CDebRegulatorDlg anlegen. In Deiner OnSelect - Funktion kannst Du dann immer den gewünschten Dialog sichtbar machen. So müssen die Objekte nicht immer neu angelegt werden.

Grüße, jokey2
 
Zurück