文章編號: 129649 - 上次校閱: 2006年11月21日 - 版次: 2.1

PRB: GetActiveView 傳回 NULL 的 MDI 框架視窗

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

徵狀

GetActiveView() 函式會傳回作用中的檢視 (如果有的話) 附加至框架視窗 (CFrameWnd)。此函式會傳回 NULL 呼叫 MDI 主框架視窗 (CMDIFrameWnd) 時。

發生的原因

在 MDI 應用程式 MDI 主框架視窗 (CMDIFrameWnd) 沒有與其相關聯的檢視。而是,每個個別的子視窗 (CMDIChildWnd) 都有與其相關聯的一或多個檢視。因此,MDI 主框架視窗 GetActiveView() 函式呼叫會傳回 NULL。 本文 < 其他相關資訊 > 一節提供在 MDI 應用程式中不同的視窗的配置。

解決方案

如果要解決這個問題,找到作用中的 MDI 子系視窗] (如果有的話) 和再呼叫 GetActiveView() 函式的子視窗。可以藉由呼叫 MDIGetActive() 或 GetActiveFrame()] 函式找到作用中的 MDI 子視窗,這段程式碼所示:
   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();
				

其他相關資訊

MDI 框架視窗的工作區被稱為的 MDICLIENT 也稱為 「 工作區 」 的用戶端視窗覆蓋。這個用戶端視窗依次包含零個或多個子視窗,每一個都可以顯示在此圖表中的檢視:
                    ---------------------------
                   |      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 框架視窗並沒有直接關聯的檢視。檢視會實際與 MDI 子視窗相關聯。

因此,MDI 主框架視窗呼叫 GetActiveView() 函式會傳回 implying 沒有直接相關聯 MDICLIENT 檢視的 NULL。在 MDI 應用程式使用中的檢視可取得第一次尋找作用中的 MDI 子視窗,然後尋找使用中檢視該子視窗,本文 < 解決方案 > 一節中所述。

?考

「 程式設計 Windows 3.1"查爾斯 Petzold、 Microsoft 按,1992年。

這篇文章中的資訊適用於:
  • Microsoft Foundation Class Library 4.2?應用於:
    • 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
關鍵字:?
kbmt kbcode kbdocview kbmdi kbprb kbuidesign KB129649 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:129649? (http://support.microsoft.com/kb/129649/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
Retired KB Article依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。