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

  • 相关阅读:
    【爬虫】新闻统计
    python pip 出错 "Can't connect to HTTPS URL because the SSL module is not available.
    【sql server复制】sql server复制【最佳实践】
    mybase个人数据库笔记工具下载
    sqlserver脱机时ldf文件丢失重建
    sqlserver CTE定位点类型和递归部分的类型不匹配
    mysql物理存储(页区段)
    sql server update与delete引发的死锁
    Linux学习笔记(19)linux定时任务(crontab)
    mysql工具生态
  • 原文地址:https://www.cnblogs.com/carl2380/p/3531417.html
Copyright © 2011-2022 走看看