zoukankan      html  css  js  c++  java
  • GetActiveView 返回 NULL 为 MDI 框架窗口

    blog 在 MDI 应用程序中,MDI 主框架窗口(CMDIFrameWnd) 不具有与其相关联的视图。相反,每个单独的子窗口(CMDIChildWnd)具有与之关联的一个或多个视图。因此,对 MDI 主框架窗口的 GetActiveView() 函数的调用,则返回 NULL

    http://blog.csdn.net/changbaolong/article/details/8098353

    症状

              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

  • 相关阅读:
    dubbo+zookeeper报错:com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method
    CoreException: Could not get the value for parameter compilerId for plugin execution default-compile: PluginResolutionException: Plugin org.apache.maven.plugins:maven-compiler-plugin:3.1
    Spring容器加载配置文件
    Java基础(一)字符串之如何删除指定的字符
    Java基础(二)数组之如何排序数组并插入元素
    Java基础(一)字符串之如何比较字符串
    Spring的事务管理
    Java使用split()截取字符串
    JavaWeb过滤器实现页面跳转至登录页面
    jQuery获取session中的值
  • 原文地址:https://www.cnblogs.com/carl2380/p/3531417.html
Copyright © 2011-2022 走看看