本文共 12158 字,大约阅读时间需要 40 分钟。
访问对象 | 访问位置 | 访问实现 |
应用程序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); |
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); |
CChildFrame* pFrm = new CChildFrame(); // 框架可以是你新建或者定制的框架类 CCreateContext context; context.m_pNewViewClass = RUNTIME_CLASS(CDemoView); // 视图可以是你想显示的视图 pFrm->LoadFrame( IDR_TEST2TYPE,WS_CHILD | WS_OVERLAPPEDWINDOW,this,&context); // 菜单资源你可以修改 pFrm->ShowWindow(SW_SHOW); // 显示窗口 pFrm->InitialUpdateFrame(NULL,true); // 调用视图的 OnInitialUpdate ()和框架的 ActiveFrame (),你可以在这里设置窗口的标题 |
context.m_pCurrentDoc = m_pDoc; // m_pDoc 就是你要关联到的文档对象 |
HMENU m_hOPMenu; HMENU m_hInitMenu; |
m_hInitMenu = ::LoadMenu(hInst, MAKEINTRESOURCE(IDR_MAINFRAME)); m_hOPMenu = ::LoadMenu(hInst, MAKEINTRESOURCE(IDR_DEMOTYPE)); |
pFrame->SetWindowText(" 武汉大学计算机学院 - 未登录 "); m_nCmdShow = SW_SHOWMAXIMIZED; pFrame->ShowWindow(m_nCmdShow); // 系统提供 pFrame->UpdateWindow(); |
void CDemoApp::OnLogin() { // TODO: Add your command handler code here SetMenu(AfxGetApp()->m_pMainWnd->m_hWnd,m_hOPMenu); AfxGetApp()->m_pMainWnd->SetWindowText(" 武汉大学计算机学院 - 已登录 "); } |
void CDemoApp::OnLogout() { // TODO: Add your command handler code here if(((CMainFrame *)AfxGetMainWnd())->m_pFuncOneFrame != NULL) ((CMainFrame *)AfxGetMainWnd())->m_pFuncOneFrame->SendMessage(WM_CLOSE); if(((CMainFrame *)AfxGetMainWnd())->m_pFuncTwoFrame != NULL) ((CMainFrame *)AfxGetMainWnd())->m_pFuncTwoFrame->SendMessage(WM_CLOSE); SetMenu(AfxGetApp()->m_pMainWnd->m_hWnd,m_hInitMenu); AfxGetApp()->m_pMainWnd->SetWindowText(" 武汉大学计算机学院 - 未登录 "); } |
CDemoFrame* m_pFuncOneFrame; CDemoFrame * m_pFuncTwoFrame; |
CMainFrame::CMainFrame() { // TODO: add member initialization code here m_pFuncOneFrame = NULL; m_pFuncTwoFrame = NULL; } |
void CMainFrame::OnFuncOne() { // TODO: Add your command handler code here if (m_pFuncOneFrame != NULL) { m_pFuncOneFrame->MDIActivate(); return ; } m_pFuncOneFrame = new CDemoFrame(); CCreateContext context; context.m_pNewViewClass = RUNTIME_CLASS(CFuncOneView); m_pFuncOneFrame->LoadFrame(IDR_MAINFRAME,WS_MAXIMIZE|WS_OVERLAPPEDWINDOW,this,&context); m_pFuncOneFrame->SetWindowText(" 业务逻辑一 "); m_pFuncOneFrame->ShowWindow(SW_SHOWMAXIMIZED); m_pFuncOneFrame->InitialUpdateFrame(NULL,true); } |
void CMainFrame::OnFuncTwo() { // TODO: Add your command handler code here if (m_pFuncTwoFrame != NULL) { m_pFuncTwoFrame->MDIActivate(); return ; } m_pFuncTwoFrame = new CDemoFrame(); CCreateContext context; context.m_pNewViewClass = RUNTIME_CLASS(CFuncTwoView); m_pFuncTwoFrame->LoadFrame(IDR_MAINFRAME,WS_MAXIMIZE|WS_OVERLAPPEDWINDOW,this,&context); m_pFuncTwoFrame->SetWindowText(" 业务逻辑二 "); m_pFuncTwoFrame->ShowWindow(SW_SHOWMAXIMIZED); m_pFuncTwoFrame->InitialUpdateFrame(NULL,true); } |
CString CDemoDoc::GetData() { return "Hello world"; } |
CDemoDoc* CFuncOneView::GetDocument() { return (CDemoDoc*)m_pDocument; } |
void CFuncOneView::OnDraw(CDC* pDC) { //CDocument* pDoc = GetDocument(); // TODO: add draw code here CDemoDoc* pDoc = GetDocument(); pDC->TextOut(50,50,pDoc->GetData()); } |
void CMainFrame::OnFuncOne() { // TODO: Add your command handler code here if (m_pFuncOneFrame != NULL) { m_pFuncOneFrame->MDIActivate(); return ; } m_pFuncOneFrame = new CDemoFrame(); CDemoDoc* m_pDoc = new CDemoDoc(); CCreateContext context; context.m_pNewViewClass = RUNTIME_CLASS(CFuncOneView); context.m_pCurrentDoc = m_pDoc; m_pFuncOneFrame->LoadFrame(IDR_MAINFRAME,WS_MAXIMIZE|WS_OVERLAPPEDWINDOW,this,&context); m_pFuncOneFrame->SetWindowText(" 业务逻辑一 "); m_pFuncOneFrame->ShowWindow(SW_SHOWMAXIMIZED); m_pFuncOneFrame->InitialUpdateFrame(NULL,true); } |
转载地址:http://ocxqj.baihongyu.com/