自定义类中怎么获得文档 视图指针
在类的开始部分要声明 文档 视图类(#include "YourDocument.h" #include "YourView.h" )
方法1:
CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
CYourDocument* pDoc = pFrame->GetActiveDocument();
( CYourView* pView = pFrame->GetActiveView(); )
这时编译会出错,cannot convert from 'class CDocument *' to "class CYourDocument* ";
需要类型强制转换: CYourDocument* pDoc =(CYourDocument* ) pFrame->GetActiveDocument();
再运行不会出错。
方法2 :
获得当前活动试图的文档
-if SDI:AfxGetMainWnd()->GetActiveView()->GetDocument()
-if MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument()
例子:
CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
CCh1_1Doc* pDoc = (CCh1_1Doc*)(pMain->MDIGetActive()->GetActiveView()->GetDocument());
总结:
VC MFC SDI/MDI框架各部分指针获取方式
|
获得CWinApp |
获得CMainFrame |
获得CChildFrame |
获得CDocument |
获得CView |
在CWinApp中 |
|
AfxGetMainWnd() m_pMainWnd |
AfxGetMainWnd()->MDIGetActive() AfxGetMainWnd()->GetActiveFrame() |
SDI:AfxGetMainWnd()->GetActiveView()->GetDocument() MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument() |
SDI:AfxGetMainWnd()->GetActiveView() MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView() |
在CMainFrame中 |
AfxGetApp() theApp |
MDIGetActive() GetActiveFrame() |
SDI:GetActiveView()->GetDocument() MDI:MDIGetActive()->GetActiveView()->GetDocument() |
SDI:GetActiveView() MDI:MDIGetActive()->GetActiveView() | |
在CChildFrame中 |
AfxGetApp() theApp |
GetParentFrame() |
|
GetActiveView()->GetDocument() | GetActiveView() |
在CDocument中 |
AfxGetApp() theApp |
AfxGetMainWnd() |
AfxGetMainWnd()->MDIGetActive() AfxGetMainWnd()->GetActiveFrame() |
POSITION pos = GetFirstViewPosition();GetNextView(pos) | |
在CView中 |
AfxGetApp() theApp |
AfxGetMainWnd() | GetParentFrame() | GetDocument() | |
在其他类中 |
AfxGetApp() |
AfxGetMainWnd() |
AfxGetMainWnd()->MDIGetActive() AfxGetMainWnd()->GetActiveFrame() |
SDI:AfxGetMainWnd()->GetActiveView()->GetDocument() MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView()->GetDocument() |
SDI:AfxGetMainWnd()->GetActiveView() MDI:AfxGetMainWnd()->MDIGetActive()->GetActiveView() |
上一篇: 用skinmagic给VC6开发的软件换肤 下一篇: #pragma pack(1) and #pragma pack(push,1)的含义
发表评论 评论 (0 个评论)