Dateiauswahl, Pfad in Variable halten



  • Mmmhh...
    ich rufe den Dialog mit

    void CFileView::OnTest()
    {
    CReg1 Eigenschaftsseite1(_T("Optionen"));
    Eigenschaftsseite1.DoModal();
    }

    in der fileView.cpp auf // file ist der Verzeichnisname...

    Dort gibt es keine InitInstance, diese gibt es nur in der file.cpp mit:

    BOOL CFileApp::InitInstance()
    {
    AfxEnableControlContainer();
    m_strIniFile = "test.ini";

    #ifdef _AFXDLL
    Enable3dControls(); // Call this when using MFC in a shared DLL
    #else
    Enable3dControlsStatic(); // Call this when linking to MFC statically
    #endif

    SetRegistryKey(_T("Local AppWizard-Generated Applications"));

    LoadStdProfileSettings(); // Load standard INI file options (including MRU)

    CSingleDocTemplate* pDocTemplate;
    pDocTemplate = new CSingleDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CFileDoc),
    RUNTIME_CLASS(CMainFrame), // main SDI frame window
    RUNTIME_CLASS(CFileView));
    AddDocTemplate(pDocTemplate);

    // Parse command line for standard shell commands, DDE, file open
    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);

    // Dispatch commands specified on the command line
    if (!ProcessShellCommand(cmdInfo))
    return FALSE;

    // The one and only window has been initialized, so show and update it.
    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow();

    return TRUE;
    }

    trja und dort weis ich momentan nicht mehr weiter..

    Gruß
    andy_mann



  • Achso, du hast ein SDI-Programm, sags doch gleich 😉

    Mach die Abfrage doch einfach in CFileView::OnTest und speichere den String in der Ini Datei, wenn IDOK zurückgegeben wird.

    void CFileView::OnTest() 
    { 
    CReg1 Eigenschaftsseite1(_T("Optionen")); 
    int nRet = Eigenschaftsseite1.DoModal(); 
    if(nRet==IDOK) // blabla
    }
    

    Grüße Rapha



  • Hallo,

    ok....
    habe jetzt folgendes getan,
    void CFileView::OnTest()
    {
    CReg1 Eigenschaftsseite1(_T("Optionen"));
    int nRet = Eigenschaftsseite1.DoModal();
    if(nRet==IDOK)
    {
    CFileApp* pApp = (CFileApp*) AfxGetApp();
    WritePrivateProfileString("common","EinPfad",m_sResults,fPfadZurExe(pApp->m_strIniFile));
    }
    }

    jetzt gibt es allerdings einen fehler, error C2065: 'm_sResults' : undeclared identifier.

    habe schon die Reg1Seite1 includet, trotzdem selben fehler.

    Gruß
    andy_mann



  • Hi,
    okok, Schritt für Schritt.

    Füge jetzt eine Membervariablevariable Namens m_strData in die Klasse CReg1 ein und achte dabei, dass sie im public Bereich steht (nicht im private oder friend-Bericht!!!) (also unter public:).

    Diese Variable willst du jetzt beim Verlassen des Dialogs mit demmit dem Inhalt des Textfeldes wie folgt:

    Füge eine Funktion hinzu, die die Nachricht WM_DESTROY abfängt.
    In diese schreibst du folgenden Code:

    void CDestDlg::OnDestroy() 
    {
    	GetDlgItemText(IDC_EDIT1, m_strData);
    	CDialog::OnDestroy();
    }
    

    wobei du anstatt IDC_EDIT1 den Namen deines Editfeldes einfügst.

    Jetzt änderst du OnTest wie folgt ab:

    void CFileView::OnTest() 
    { 
    CReg1 Eigenschaftsseite1(_T("Optionen")); 
    int nRet = Eigenschaftsseite1.DoModal(); 
    if(nRet==IDOK) 
    { 
    CFileApp* pApp = (CFileApp*) AfxGetApp(); 
    WritePrivateProfileString("common","EinPfad",Eigenschaftsseite1.m_strData,fPfadZurExe(pApp->m_strIniFile)); 
    } 
    }
    

    Außerdem änderst du die OnFileopen Funktion wie folgt ab (IDC_EDIT1 wieder mit dem Namen deines Editfeldes, das den Namen zu der Datei anzeigt, ersetzten)

    void CReg1Seite1::OnFileopen() 
    { 
    CFileDialog m_ldFile(TRUE, 
    "txt""csv", 
    NULL, //"*.txt", 
    OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
    "Textdateien (*.txt)|*.txt|Textdateien (*.csv)|*.csv|Alle Dateien (*.*)|*.*||"); 
    
    // Dialogfeld Öffnen zeigen und Ergebnis auffangen 
    if (m_ldFile.DoModal() == IDOK) 
    { 
    // Gewählten Dateinamen ermitteln 
    m_strData = m_ldFile.GetPathName(); 
    SetDlgItemText(IDC_EDIT1, m_strData);
    } 
    
    }
    

    Grüße Rapha



  • Hallo Rapha,

    vielen vielen Dank für dein Bemühen,
    leider haut es nicht so hin wie Du es beschreibst.

    In welchen File muß den jetzt die Funktion
    void CDestDlg::OnDestroy()
    {
    GetDlgItemText(IDC_RESULTS, m_strData);
    CDialog::OnDestroy();
    }

    stehen ??

    Gruß
    andy_mann



  • Äh verzeihung, es natürlich CReg1::OnDestroy bzw CReg1Seite1 sein (die Klasse, die das Edit Control "beinhaltet") (ich komme bei deinen Klassen durcheinander 😉 ).

    Grüße Rapha


Anmelden zum Antworten