GetActiveView 返回 NULL 为 MDI 框架窗口
2014-05-13 14:31
357 查看
症状
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
相关文章推荐
- GetActiveView 返回 NULL 为 MDI 框架窗口
- GetActiveView 返回 NULL 为 MDI 框架窗口
- android getActivity.findViewById获取ListView 返回NULL
- phpExcel getActiveSheet方法返回null解决办法
- MenuItemCompat.getActionView(item)返回null
- Android:解决view.getDrawingCache()返回null的问题
- 在DOc的构造函数中得到VIew类指针引起的问题(GetActiveView()引起的Access Violation;this->GetFirstViewPosition()=NULL;ASSERT(AfxIsValidAddress(this, siz
- actionViewClass使用 menuItem.getActionView() MenuItemCompat.getActionView() 返回null
- android getActivity.findViewById获取ListView 返回NULL的方法
- MDI中通过GetActiveView获得VIEW
- MFC MDI GetActiveView() 为空
- CMDIChildWnd* MDIGetActive( BOOL* pbMaximized = NULL ) const;
- Android:解决view.getDrawingCache()返回null的问题
- 【框架-MFC】MFC 应用程序 AfxGetMainWnd();在子线程中返回null
- myXmlHttpRequest.responseXML.getElementsByTagName()返回null
- 关于document.getElementById返回为null的解释
- findViewById返回Null
- WindowManager.getDefault().findTopComponent返回为null
- Android中View转换为Bitmap及getDrawingCache=null的解决方法
- AndroidGUI27:findViewById返回null的解决办法