现在的位置: 首页 > 综合 > 正文

GetActiveView 返回 NULL 为 MDI 框架窗口

2013年03月22日 ⁄ 综合 ⁄ 共 1774字 ⁄ 字号 评论关闭

症状

          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 theactive 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() 函数将返回 NULL,意味着没有直接与 MDICLIENT 相关视图。通过先查找活动的 MDI 子窗口,在本文的解决方案一节中所述,为的子窗口查找活动视图,可以获取 MDI 应用程序中的活动视图。

转载自:http://support.microsoft.com/kb/129649

 

抱歉!评论已关闭.