Artikel-ID: 129649 - Geändert am: Dienstag, 21. November 2006 - Version: 2.1

PRB: GetActiveView gibt für ein MDI-Rahmenfenster NULL

SystemtippDieser Artikel bezieht sich auf ein anderes Betriebssystem als das von Ihnen verwendete. Für Sie möglicherweise nicht relevante Artikelinhalte wurden deaktiviert.
Alles erweitern | Alles schließen

Problembeschreibung

Die GetActiveView()-Funktion gibt die aktive Ansicht (falls vorhanden) an ein Rahmenfenster (CFrameWnd) angefügt. Diese Funktion gibt NULL, wenn für eine MDI-Hauptrahmenfenster (CMDIFrameWnd) aufgerufen.

Ursache

Das MDI-Hauptrahmenfenster (CMDIFrameWnd) muss in einer MDI-Anwendung keine Ansicht zugeordnet. Stattdessen besitzt jedes einzelnen untergeordneten Fenster (CMDIChildWnd) eine oder mehrere Ansichten zugeordnet. Daher gibt ein Aufruf der Funktion GetActiveView() für eine MDI-Hauptrahmenfenster NULL zurück. Der "Weitere Informationen" Abschnitt dieses Artikels bietet das Layout der verschiedenen Fenster in einer MDI-Anwendung.

Lösung

Zur Behebung des Problems finden Sie das aktive untergeordnete MDI-Fenster (falls vorhanden) und rufen dann die Funktion GetActiveView() für das untergeordnete Fenster. Das aktive untergeordnete MDI-Fenster kann durch Aufrufen der Funktion MDIGetActive() oder GetActiveFrame() gefunden werden, wie in diesem Code veranschaulicht:
   CMDIFrameWnd *pFrame = (CMDIFrameWnd *)AfxGetApp()->m_pMainWnd;
   // Get the active MDI child window.
   CMDIChildWnd *pChild =
                  (CMDIChildWnd *) pFrame->GetActiveFrame();
   /* or CMDIChildWnd *pChild =
                  pFrame->MDIGetActive();
   */ 
   // Get the active view attached to the active MDI child window.
   CMyView *pView = (CMyView *) pChild->GetActiveView();
				

Weitere Informationen

Clientbereich eines MDI-Rahmenfenster wird durch das Clientfenster als MDICLIENT, auch bekannt als Arbeitsbereich bezeichnet abgedeckt. Dieses Clientfenster enthält wiederum 0 (null) oder mehr untergeordnete Fenster, von denen jedes eine als in diesem Diagramm anzuzeigen, kann:
                    ---------------------------
                   |      Frame Window         |  ---> CMDIFrameWnd
                   | (main application window) |
                    ---------------------------
                             |
                    --------------------
                   |   Client Window    |  ---> MDICLIENT window class
                   | (no view attached) |
                    --------------------
                             |
         -----------------------------------------------------------
         |                            |
 ---------------------      --------------------
|   Child Window 1    |    |   Child Window 2   |  ---> CMDIChildWnd
| (one or more views) |    | (one or more views |
 ---------------------      --------------------
				
wie in diesem Diagramm dargestellt, MDI-Rahmenfenster nicht über eine Ansicht direkt zugeordnet. Die Ansichten sind tatsächlich untergeordneter MDI-Fenster zugeordnet.

Deshalb gibt das Aufrufen der GetActiveView()-Funktion für ein MDI-Hauptrahmenfenster NULL, sagen, dass keine Ansicht MDICLIENT direkt zugeordnet ist zurück. Die aktive Ansicht in einer MDI-Anwendung erhalten Sie durch suchen zuerst das aktive untergeordnete MDI-Fenster und suchen die aktive Ansicht für das untergeordnete Fenster, wie im Abschnitt Lösung in diesem Artikel beschrieben.

Informationsquellen

"Programming Windows 3.1," Press Charles Petzold, Microsoft, 1992.

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Foundation Class Library 4.2, wenn verwendet mit:
    • Microsoft Visual C++ 1.0 Professional Edition
    • Microsoft Visual C++ 1.5 Professional Edition
    • Microsoft Visual C++ 1.51
    • Microsoft Visual C++ 1.52 Professional Edition
    • Microsoft Visual C++ 5.0 Learning Edition
    • Microsoft Visual C++ 2.0 Professional Edition
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 4.0 Professional Edition
Keywords: 
kbmt kbcode kbdocview kbmdi kbprb kbuidesign KB129649 KbMtde
Maschinell übersetzter ArtikelMaschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 129649  (http://support.microsoft.com/kb/129649/en-us/ )
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Retired KB ArticleDisclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.