2024年3月5日发(作者:)

c++从view类调用数据到doc类的代码例子

document/view模式,是为了在逻辑上,让数据和显示分开。一般在document里,定义document类的成员变量,来存数据,并用View来显示。在document里,当成员变量的数据改变时,你可以用UpdateAllViews()来通知视图更新。在View里,用GetDocument来获取与之对应document的指针,进而可以访问document的成员变量,从而进行显示Document/View仅仅是MFC为你提供的一种很好的支持而已。

注意:

1、Document和View之间的绑定:View绑定到Document。

2、Frame作为Controller时,由于可以接收到输入消息,比较适合充当控制器。但是,由于视图和文档绑定,所以在切换视图时需要将视图和文档分离开,然后再进行切换。

3、View作为Contrller时,由于该视图和文档是绑定的,所以,可以通过该视图将其他视图与文档关联起来,其他视图并不直接和文档绑定。因此,可以通过隐藏和显示视图来实现不同视图之间的切换。

4、MFC的Doc/View结构本质上就是MVC结构,是MVC结构的一种实现,但是对MVC结构进行了简化。

View是指编辑区里面的事就是那块白色的中间区域他负责绘制和响应一些消息

Doc就有点像数据库,他保存着编辑数据,用于view的Redraw的时候用,还有保存文件。反正动态的编辑数据都放在Doc里面。他

也不是从CWND中派生出来的,没有继承MessageBox函数,可以用AfxMessageBox函数。

1) 在View中获得Doc指针 CYouSDIDoc *pDoc=GetDocument();一个视只能有一个文档。

2) 在App中获得MainFrame指针 CWinApp 中的 m_pMainWnd变量就是MainFrame的指针 也可以:CMainFrame *pMain =(CMainFrame

*)AfxGetMainWnd();

3) 在View中获得MainFrame指针 CMainFrame

*pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;

4) 获得View(已建立)指针 CMainFrame *pMain=(CmaimFrame

*)AfxGetApp()->m_pMainWnd; CyouView *pView=(CyouView

*)pMain->GetActiveView();

5) 获得当前文档指针 CDocument * pCurrentDoc =(CFrameWnd

*)m_pMainWnd->GetActiveDocument();

6) 获得状态栏与工具栏指针 CStatusBar * pStatusBar=(CStatusBar

*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);

CToolBar * pToolBar=(CtoolBar

*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);

7) 如果框架中加入工具栏和状态栏变量还可以这样

(CMainFrame *)GetParent()->m_wndToolBar; (CMainFrame

*)GetParent()->m_wndStatusBar;

8) 在Mainframe获得菜单指针 CMenu

*pMenu=m_pMainWnd->GetMenu();

9) 在任何类中获得应用程序类 用MFC全局函数AfxGetApp()获得。

获得CWinApp:

——在CMainFrame,CChildFrame,CDocument,CView中直接调用AfxGetApp()或用theApp

——在其它类中只能用AfxGetApp()