访问对象
|
访问位置
|
访问实现
|
应用程序 App
|
任何位置
|
① AfxGetApp();
② 在要使用应用程序 App 的文件中加入:
extern CAApp theApp
,然后直接使用全局的 theApp 变量。
|
主框架窗口
|
任何位置
|
① AfxGetMainWnd();
② AfxGetApp()->m_pMainWnd;
|
视图
|
框架类中
|
GetActiveView();//
当前的活动视图
|
文档类中
|
GetFirstViewPosition
(); // 可以获取全部视图
GetNextView
();
|
|
文档
|
文档类中
|
GetDocument()
;
|
文当模版类中
|
GetFirstDocPosition(); //
该文档模版对应全部文档
GetNextDoc();
|
|
框架类中
|
GetActiveDocument(); //
当前活动文当
|
|
子框架类( MDI 中)
|
主框架类中
|
① MDIGetActive ();
② GetActiveFrame ();
|
视图类中
|
GetParentFrame();
|
|
文档模版
|
文档类中
|
GetDocTemplate();
|
应用程序 App 中
|
GetFirstDocTemplatePosition();
GetNextDocTemplate();
|
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CTestDoc),
RUNTIME_CLASS(CMainFrame),// main SDI frame window
RUNTIME_CLASS(CTestView));
AddDocTemplate(pDocTemplate);
|
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_TESTTYPE,
RUNTIME_CLASS(CTestDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CTestView));
AddDocTemplate(pDocTemplate);
|
CMultiDocTemplate* m_pDocTemplate;
m_pDocTemplate = new CMultiDocTemplate(
IDR_TESTTYPE,//
改为你新建的菜单资源
ID
RUNTIME_CLASS(CTestDoc),//
改为你新建的文档类
RUNTIME_CLASS(CChildFrame), //
改为你新建的框架类
RUNTIME_CLASS(CTestView));//
改为你新建的视图类
AddDocTemplate(m_pDocTemplate);
|
CMultiViewDoc* CAnotherView::GetDocument()
{
return (CMultiViewDoc*)m_pDocument;
}
|
private:
CView* m_pFirstView;
CView* m_pAnotherView;
|
…….
//
创建一个新的视图
CView* m_pActiveView = ((CFrameWnd*)m_pMainWnd)->GetActiveView();
m_pFirstView = m_pActiveView;
m_pAnotherView = new CAnotherView();
//
文档和视图关联
CDocument* m_pDoc = ((CFrameWnd*)m_pMainWnd)->GetActiveDocument();
CCreateContext context;
context.m_pCurrentDoc = m_pDoc;
//
创建视图
UINT m_IDFORANOTHERVIEW = AFX_IDW_PANE_FIRST + 1;
CRect rect;
m_pAnotherView->Create(NULL,NULL,WS_CHILD,rect,m_pMainWnd,
m_IDFORANOTHERVIEW,&context);
……
|
void CMultiViewApp::OnShowFirstview()
{
// TODO: Add your command handler code here
UINT temp = ::GetWindowLong(m_pAnotherView->m_hWnd, GWL_ID);
::SetWindowLong(m_pAnotherView->m_hWnd, GWL_ID, ::GetWindowLong(m_pFirstView->m_hWnd, GWL_ID));
::SetWindowLong(m_pFirstView->m_hWnd, GWL_ID, temp);
m_pAnotherView->ShowWindow(SW_HIDE);
m_pFirstView->ShowWindow(SW_SHOW);
((CFrameWnd*)m_pMainWnd)->SetActiveView(m_pFirstView);
((CFrameWnd*) m_pMainWnd)->RecalcLayout();
m_pFirstView->Invalidate();
}
|
void CMultiViewApp::OnShowSecondview()
{
// TODO: Add your command handler code here
UINT temp = ::GetWindowLong(m_pAnotherView->m_hWnd, GWL_ID);
::SetWindowLong(m_pAnotherView->m_hWnd, GWL_ID, ::GetWindowLong(m_pFirstView->m_hWnd, GWL_ID));
::SetWindowLong(m_pFirstView->m_hWnd, GWL_ID, temp);
m_pFirstView->ShowWindow(SW_HIDE);
m_pAnotherView->ShowWindow(SW_SHOW);
((CFrameWnd*)m_pMainWnd)->SetActiveView(m_pAnotherView);
((CFrameWnd*) m_pMainWnd)->RecalcLayout();
m_pAnotherView->Invalidate();
}
|
pDC->TextOut(400,300,"First View");
pDC->TextOut(400,320,pDoc->GetTitle());
|
pDC->TextOut(400,300,"Another View");
pDC->TextOut(400,320,pDoc->GetTitle());
|
m_pAnotherView = new CAnotherView(); //new
一个新的视图,可以改为你新建的视图
//
获取一个已有的文档,可以是你新建的文档
CDocument* m_pDoc = ((CFrameWnd*)m_pMainWnd)->GetActiveDocument();
//
文档和视图关联
CCreateContext context;
context.m_pCurrentDoc = m_pDoc;
//
创建视图
UINT m_IDFORANOTHERVIEW = AFX_IDW_PANE_FIRST + 1; //
创建视图的
ID 号,你可以自己设置
CRect rect;
m_pAnotherView->Create(NULL, NULL, WS_CHILD, rect, m_pMainWnd, m_IDFORANOTHERVIEW, &context);
|