Modeless Fenster wird nicht angezeigt



  • Hi,
    ich habe eine Funktion, die bestimmte Dateien kopiert (sichert).
    Um es dem Anwender anschaulicher zu machen, wollte ich dem ihm
    ein Fenster aufmachen, in dem die kopierten Dateien aufgelistet werden.

    Mache ich es modal, kommt das Fenster, jedoch kann ich nicht mehr die
    Dateien kopieren, weil das Programm ja angehalten wird, solange das
    Kontroll-Fenster offen ist.

    Wenn ich aber das Kontroll-Fenster modeless aufrufe, blinkt es kurz auf
    und ist dann aber nicht mehr zu sehen.

    Erstellt habe ich es so:
    - Neuen Dialog im Resourcen-Editor eingefügt (IDD_DIALOG_BACKUP_COPYFILES)
    - Neue MFC-Klasse im Projekt angelegt
    Basisklasse: CDialog
    Dialogfeld-ID: IDD_DIALOG_BACKUP_COPYFILES

    Wenn euch das Problem unbekannt ist, könnt ihr mir vielleicht
    eine Hilfestellung zur Fehlerdiagnose geben.

    Vielen Dank.

    Aufruf im Programm:

    CCopyFileDialog tmpDialog;
    //  tmpDialog.DoModal();    // Funktioniert im Gegensatz zum nicht modalen Aufruf
    tmpDialog.Create(IDD_DIALOG_BACKUP_COPYFILES);
    tmpDialog.ShowWindow(SW_SHOWNORMAL);
    
    /*
        // So geht es auch nicht ...
        CCopyFileDialog *tmpDialog = new CCopyFileDialog();
        tmpDialog->Create(IDD_DIALOG_BACKUP_COPYFILES);
        tmpDialog->ShowWindow(SW_SHOWNORMAL);
    */
    

    Header-Datei:

    #if !defined(AFX_COPYFILEDIALOG_H__833A4067_8430_481B_8511_679AB75074B2__INCLUDED_)
    #define AFX_COPYFILEDIALOG_H__833A4067_8430_481B_8511_679AB75074B2__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    #include "../prama.h"
    
    // CopyFileDialog.h : Header-Datei
    //
    
    /////////////////////////////////////////////////////////////////////////////
    // Dialogfeld CCopyFileDialog 
    
    class CCopyFileDialog : public CDialog
    {
    // Konstruktion
    public:
        void AddEntry(CString Entry);
        CCopyFileDialog(CWnd* pParent = NULL);   // Standardkonstruktor
    
    // Dialogfelddaten
        //{{AFX_DATA(CCopyFileDialog)
        enum { IDD = IDD_DIALOG_BACKUP_COPYFILES };
        CListBox    m_ctlFileList;
        //}}AFX_DATA
    
    // Überschreibungen
        // Vom Klassen-Assistenten generierte virtuelle Funktionsüberschreibungen
        //{{AFX_VIRTUAL(CCopyFileDialog)
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
        //}}AFX_VIRTUAL
    
    // Implementierung
    protected:
    
        // Generierte Nachrichtenzuordnungsfunktionen
        //{{AFX_MSG(CCopyFileDialog)
            // HINWEIS: Der Klassen-Assistent fügt hier Member-Funktionen ein
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
    };
    
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ fügt unmittelbar vor der vorhergehenden Zeile zusätzliche Deklarationen ein.
    
    #endif // AFX_COPYFILEDIALOG_H__833A4067_8430_481B_8511_679AB75074B2__INCLUDED_
    

    Implementationsdatei:

    // CopyFileDialog.cpp: Implementierungsdatei
    //
    
    #include "stdafx.h"
    #include "CopyFileDialog.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    /////////////////////////////////////////////////////////////////////////////
    // Dialogfeld CCopyFileDialog 
    
    CCopyFileDialog::CCopyFileDialog(CWnd* pParent /*=NULL*/)
        : CDialog(CCopyFileDialog::IDD, pParent)
    {
        //{{AFX_DATA_INIT(CCopyFileDialog)
            // HINWEIS: Der Klassen-Assistent fügt hier Elementinitialisierung ein
        //}}AFX_DATA_INIT
    }
    
    void CCopyFileDialog::DoDataExchange(CDataExchange* pDX)
    {
        CDialog::DoDataExchange(pDX);
        //{{AFX_DATA_MAP(CCopyFileDialog)
        DDX_Control(pDX, IDC_LIST_BACKUPFILES, m_ctlFileList);
        //}}AFX_DATA_MAP
    }
    
    BEGIN_MESSAGE_MAP(CCopyFileDialog, CDialog)
        //{{AFX_MSG_MAP(CCopyFileDialog)
            // HINWEIS: Der Klassen-Assistent fügt hier Zuordnungsmakros für Nachrichten ein
        //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // Behandlungsroutinen für Nachrichten CCopyFileDialog 
    
    void CCopyFileDialog::AddEntry(CString Entry){
        m_ctlFileList.AddString(Entry);
    }
    


  • So müsste es gehen:

    Definition:
    #include "ColorLegend.h"
    CColorLegend dlgLegend;

    Erzeugung:
    dlgLegend.Create(IDD_COLOR_LEGEND,this);

    Anzeigen/Verbergen:
    dlgLegend.ShowWindow(TRUE/FALSE);

    Entladen:
    dlgLegend.DestroyWindow();

    Habe das mal für eine Farb-Legende benutzt.

    Gruß
    Bernd


Anmelden zum Antworten