Dateiauswahl, Pfad in Variable halten
-
Mmmhh...
ich rufe den Dialog mitvoid 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
#endifSetRegistryKey(_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