Von InitInstance auf Doc-Klasse zugreifen

langer1801

Erfahrenes Mitglied
Hallo,
ich möchte beim Start meines Projektes (SDI-Anwendung) eine Password-Abfrage integrieren. Diese soll nach der Erzeugung und Anzeige des Hauptfensters erfolgen. Eigentlich kein Problem, habe ich in InitInstance integriert. Allerdings muß ich dann anhand der Passwörter eine Variable in der Doc-Klasse setzen. Und da liegt mein Problem. Ich habe noch keine Möglichkeit gefunden, von InitInstance auf die Doc-Klasse zuzugreifen. Alle Versuche endeten in Compiler-Meckern :( . Ist die Doc-Klasse in InitInstance eigentlich schon erzeugt? Oder muß ich meine Passwort-Abfrage in eine andere Funktion verlegen?

Mfg

langer
 
Hallo
Ich habe auch das selbe Problem. Aber da "langer1801" leider nicht die Lösung seines Problems angegeben hat, muss ich nochmal nachfragen.

In meinem Fall rufe ich in der InitInstance (CApp) über folgende Befehle...

CString FileName;
CCommandLineInfo cmdInfo;
FileName = cmdInfo.m_strFileName;

...den Dateipfad ab, welcher übergeben wird, wenn man eine dem Programm zugehörige Datei im Windows-Explorer doppelklickt (und so das Programm automatisch gestartet wird).

Diesen Pfad müsste ich nun in eine CString-Variable übergeben, welche der Klasse CDocument angehört.
Es würde mir schon reichen, wenn mir jemand sagen könnte, wie ich aus der CDocument-Klasse auf die globale Variable "CApp theApp" zugreifen könnte.

Bei meinem Programm handelt es sich auch um eine SDI-Anwendung.
 
Hi,
ich hab das so gelöst:
Code:
	CAbr2View* pView=(CAbr2View*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->m_wndSplitter.GetPane(0,1);
	CAbr2Doc *pDoc=(CAbr2Doc*)pView->GetDocument();
Meine Anwendung hat, wie man sieht, ein Splitter-Wnd. Du müßtest dir die aktive View holen und darüber auf das Dokument zugreifen.

Mfg

langer
 
Erstmal vielen Dank für die Antwort.

Aber leider kann ich damit nicht sehr viel anfangen, da ich mir das C++ Programmieren erst vor kurzem selbst beigebracht habe. Was kann man den genau mit diesem Splitter-Wnd machen? Und wie kann ich damit mein Problem lösen?

Mein Fall ist glaube ich auch etwas anders. Ich müsste wie gesagt nur einen CString von CApp::InitInstance() nach CDoc::OnNewDokument() bekommen.
 
Hi,
du kannst dir die aktive View holen, dort einen Zeiger auf das Dokument und dann auf alle Variablen in MyDokument zugreifen.
Code:
   CAbr2View* pView=(CAbr2View*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveView;
   CAbr2Doc *pDoc=(CAbr2Doc*)pView->GetDocument();
   pDoc->meinString=".......";

Mfg

langer
 
Okey, jetzt habe ich es glaube ich auch verstanden.

Ich hatte schon gedacht, ich müsste in meinem Programm auch so ein Splitter-Wnd anlegen.
Habe es auch gleich ausprobiert und es funktioniert!

Nochmals vielen Dank, "langer1801" :)
 
Zurück