Mehrere Projekte in einem Arbeitsbereich verbinden?

NinjaOne

Erfahrenes Mitglied
Hallo,
ich möchte ein CRichEditView und ein CTreeView erstellen (also zwei Fenster SDI).
Hab mir überlegt ich könnte das doch mit dem MFC-Anwendungs-Assistenten machen.
Habe also ein Projekt CTreeView erstellt.
Im anschluss habe ich ein Projekt CRichEditView dem Arbeitsbereich hinzugefügt und sie von dem Projekt CTreeView abhängig gemacht.
Nun kommt das Problem:
Wie kann ich nun aus der CWinApp von CTreeView das CRichEditView-Fenster aufrufen?
Wie kann ich Teile von dem Projekt CRichEditView dem Projekt CTreeView bekannt machen ?

Ich hoffe mir kann jemand helfen,danke.
bye.
 
Nutzt du denn ein Splitter-Window? Vermute ich mal, wenn du SDI nutzt. Dann kannst du doch den Explorer-Style nutzen. Und da ist es über myWnd->GetPane kein Problem, auf die zwei Views zuzugreifen.

Mfg

langer
 
Hi,
nein ich benutze kein Splitter-Window.
Möchte das zweite Window (CRichEditView) aufrufen wenn ich es benötige. Es soll parallel zum ersten Window (CTreeView) laufen.
Weiss aber nicht mal wie ich auf das andere Projekt zugreifen kann ?
 
Momente mal, bring da nichts durcheinander. Zwei Projekte in einem Workspace sind zwei unabhängige Programme. Du kannst zwar ein Projekt vom anderen abhängig machen, aber das macht eigentlich nur bei DLL und Hauptprogramm Sinn.

Wenn du zwei Views in einem SDI-Projekt haben willst, musst du schon tiefer in die Trickkiste greifen. Hier gab es schon mal einen Thread dazu. Im Prinzip musst du den View per Hand erzeugen und zu deinem Document hinzufügen. Einen View kann man allerdings nicht direkt erstellen, das geht über deine CMainFrame-Klasse (hast du schon im Projekt drin). Die hat eine Funktion CreateView. Eine genauere Beschreibung der Funktion erhälts du wie immer in der MSDN.
 
Hier mal ein Beispiel:
Es geht davon aus, daß zwei Views erzeugt wurden, hier eine StringView und eine HexView.
1. Die Konstruktoren der beiden Views von protected in public ändern.
2. Im Menu in "Ansicht" zwei Menu-Befehle einfügen
"Textansicht" OnViewStringView
"Hex-Ansicht" OnViewHexView

3. In MainFrame.h einfügen
Code:
private:
  enum eView{STRING=1,HEX=2};
  void SwitchToView(eView nView);
4. In MainFrame.cpp die Funktion implementieren
Code:
void CMainFrame::SwitchToView(eView nView)
{
  CView* pOldView=GetActiveView();
  CView* pNewView=(CView*)GetDlgItem(nView);
  if(pNewActiveView==NULL)
  {
    switch(nView)
    {
    case STRING:
       pNewActiveView=(CView*) new CStringView;
       break;
    case HEX:
       pNewActiveView=(CView*) new CHexView;
      break;
    }
    CreateContext context;
    context.m_pCurrentDoc=pOldActiveView->GetDocument();
    pNewActiveView->Create(NULL,NULL,WS_BORDER,
         CFrameWnd::rectDefault,this,nView,&context);
    pActiveView->OnInitialUpdate();
  }
  SetActiveView(pNewActiveView);
  pNewActiveView->ShowWindow(SW_SHOW);
  pOldActiveView->ShowWindow(SW_HIDE);
  pOldActiveView->SetDlgCtrlID(
       pOldActiveView->GetRuntimeClass()==
       RUNTIME_CLASS(CStringView) ? STRING : HEX);
  pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
  RecalcLayout();
}
5. Jetzt brauchst du nur über die beiden Menu-Befehle die Funktion mit dem entsprechenden Parameter aufzurufen und dafür zu sorgen, daß nur der Menu-Befehl nutzbar ist, dessen View n i c h t aktiv ist.
Das Beispiel stammt aus dem Buch "Inside Visual C++.NET", du brauchst nur deine View-Bezeichnungen anzupassen und brauchst dann kein zweites Projekt.


Mfg

langer
 
Danke für dei Antwort,
auch wenn ich nicht wissen wollte wie mam mehrere Projekte vermeidet. (lol)
Ich möchte anfangen mit mehreren Projekten zu arbeiten und weiss leider nicht wie.
Deshalb hab ich dieses Thema erstellt.
Würd mich freuen wenn mir jemand in diese Richtung weiterhelfen kann.
Und noch was, ich möchte nicht switchen sondern mehrer Fenster öffnen.

Bye.
 
So richtig klar ist mir nicht, was genau du willst.

Zwei Projekte (auch wenn sie im gleichen Arbeitsbereich liegen) produzieren zwei unabhängige Executables. Einzig für den Erstellungsprozess können Abhängigkeiten festgelegt werden. Man kann natürlich das eine Programm vom anderen aus aufrufen, etwa via CreateProcess(), aber das hat erst mal nichts mit der Projektverwaltung zu tun.

Oder willst du vielleicht bestimmte Sourcen in beiden Projekten verwenden? Dazu musst du dann nichts weiter tun, als ein und dieselbe Quelldatei in beide Projekte einzufügen.
 
Schade, daß mein Beispiel nicht geholfen hat. Aber vielleicht kann's ja jemand anders brauchen.
Allerdings war deine Fragestellung für mich auch mißverständlich.
Ich weiß auch nicht, ob du an so etwas denkst wie die Add-In-Programme in größeren kommerziellen Projekten. In solchen Fall könnte ich mir das Arbeiten mit mehreren Projekten vorstellen. Dann müßte aber das Hauptprogramm ein genau definierte Schnittstelle haben, an der das Add-In angreift. Eine andere Anwendung fällt mir im Moment nicht ein.

Mfg

langer
 
Ok,
ich versuch mich mal etwas verständlicher auszudrücken (lol).
Ich habe gelesen, dass man mehrere Projekte in einen Arbeitsbereich einfügen kann.
Das ganze soll ganz sinnvoll sein da man jedes Projekt auch einzeln starten und weiterentwickeln kann.
Nun meine Überlegung:
Ich erstelle mit dem MFC-Anwendungs-Assistenten ein SDI-Fenster mit Document-Architektur und leite C....View von der BasisKlasse CTreeView ab.
Nun hab ich ein Projekt in meinem Arbeitsbereich.
Das zweite Projekt füre ich über Projekt/Dem Projekt hinzufügen/Neu hinzu.
Ich benutze wieder den MFC-Anwendungs-Assistenten um ein zweites SDI-Fenster zu erstellen das abhängig von aktuellen Arbeitsbereich und des ersten Projektes ist.
In dem Projekt leite ich C....View von der Basisklasse CRichEditView ab.
Nun müsste ich doch von dem Projekt 1 aus das Projekt 2 (das von CRichEditView abgeleitete Fenster) aufrufen und somit verwenden können, oder ?
Wenn ja wie kann ich das machen ?

Zu der Frage warum ich das so machen möchte?
Antwort: Ich will mir Schreibarbeit ersparen.

Was will man mit so einem Progamm?
Antwort: Ich möchte ein Hauptfenster(SDI) von dem ich unterschiedliche Unterfenster(SDI) aufrufen kann die sich aber alle schliessen, wenn ich das Haupfenster schliesse.
Die verwaltung der Fenster im Progamm soll wie bei Trillian laufen, ist ein gutes Beispiel.

Also, wenn jemand mir sagen kann wie ich auf Projekt A zugreifen kann währe ich ihm sehr verbunden. Ich suche keine andere Lösung sondern eine Erklärung wie ich Von Projekt 1 auf Projekt 2 zugreife und wie ich das Fenster aus Projekt 2 aus dem Fenster von Projekt 1 heraus aufrufen kann.

Ich hoffe ich habe mich jetzt verständlich ausgedrückt.
Das ich die Classen auch alle in ein Projekt erstellen kann und anschliessent aufrufen kann weis ich auch und das kann ich. Aber wie das über verschiedene Projekte gehen soll ist mir ein Rätsel.

Also bitte die Antworten auf diese Problematik ausrichten ,danke.
bye
.


.
 
Nunja, wie gesagt, direkt geht das nicht. Du kannst aber wohl die Source-Dateien eines Projektes auch im anderen Projekt verwenden. Die musst du dann einbinden wie andere Source-Dateien auch.

Ich habe mir zum Beispiel für meine Code-Basis ein Common-Verzeichnis auf einem anderen Laufwerk erstellt. Dort verpacke ich säuberlich in Unterordner nach Content aufgeteilt meine Basis-Bibliothek. Von dort aus kann ich dann in jedem Projekt die gewünschten Dateien hinzufügen.
 
Zurück