Makale numarası: 129649 - Son Gözden Geçirme: 21 Kasım 2006 Salı - Gözden geçirme: 2.1

SORUN: GetActiveView bir MDI çerçeve penceresi için NULL döndürüyor

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Hepsini aç | Hepsini kapa

Belirtiler

Çerçeve penceresi (CFrameWnd) etkin görünümü (varsa) bağlı GetActiveView() işlevini verir. Bu işlev, bir MDI ana çerçeve penceresi (CMDIFrameWnd) için çağrıldığında bir NULL döndürüyor.

Neden

MDI uygulamada MDI ana çerçeve penceresi (CMDIFrameWnd), kendisiyle ilişkilendirilmiş bir görünüm yok. Bunun yerine, her tek tek bir alt pencere (CMDIChildWnd) ilişkili bir veya daha çok görünümü vardır. Bu nedenle, bir MDI ana çerçeve penceresi için <a1>GetActiveView()</a1> işlevine bir çağrı NULL döndürüyor. Bu makalenin "Daha fazla bilgi" bölümünde farklı bir MDI uygulama pencerelerinde düzenini sağlar.

Çözüm

Bu sorunu gidermek için <a0></a0>, etkin olan MDI alt penceresi (varsa) ve sonra arama GetActiveView() işlevi için bu alt pencere Bul. Etkin olan MDI alt pencere MDIGetActive() veya GetActiveFrame() işlevini çağırarak bu kodda gösterildiği şekilde bulunabilir:
   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();
				

Daha fazla bilgi

MDI çerçeve penceresi istemci alanının MDICLIENT, çalışma alanı olarak da bilinen başvuru istemci pencere olarak ele alınmıştır. Bu istemci penceresi, her biri bu diyagramı gibi bir görünümü, görüntüleme, sıfır veya daha çok alt pencereleri de içerir:
                    ---------------------------
                   |      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 |
 ---------------------      --------------------
				
MDI çerçeve penceresi bu çizimde gösterildiği gibi doğrudan ilişkili Görünüm yok. Görünümler, gerçekte MDI alt pencereleri ile ilişkilendirilir.

Bu nedenle, bir MDI ana çerçeve penceresi GetActiveView() işlevini çağırma NULL, doğrudan MDICLIENT ile ilişkili yok bir görünüm olduğunu implying döndürür. Etkin görünümün bir MDI uygulamadan önce etkin olan MDI alt pencere bulma ve bu makalenin "Çözüm bölümünde özetlendiği gibi etkin görünüm için alt pencere sonra bulma elde edilebilir.

Referanslar

"Windows 3.1 programlama" Charles Petzold, Microsoft, 1992 basın.

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Foundation Class Library 4.2, Ne zaman ne ile kullanilir:
    • 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
Anahtar Kelimeler: 
kbmt kbcode kbdocview kbmdi kbprb kbuidesign KB129649 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:129649  (http://support.microsoft.com/kb/129649/en-us/ )
Retired KB ArticleKullanım Dışı Bilgi Bankası İçeriği Yasal Uyarı
Bu makale, Microsoft'un artık destek sağlamadığı ürünler ile ilgili olarak yazılmıştır. Bu nedenle, bu makale "olduğu gibi" sağlanmıştır ve bundan sonra güncelleştirilmeyecektir.