他在二楼,你在一楼,如果他没有看你的话,那为什么你们会对视呢?
---- 网易云热评
一、文档类处理数据
1、通过消息处理传递数据,并用UpdateAllViews刷新和文档对象关联的所有视图类对象
classCMyDoc :public CDocument { DECLARE_MESSAGE_MAP()public: CString str;afx_msg voidxinjian();};BEGIN_MESSAGE_MAP(CMyDoc, CDocument) ON_COMMAND(ID_XJ,xinjian)END_MESSAGE_MAP()void CMyDoc::xinjian() {//模拟接收数据this->str = "hello word";//调用视图类onupdatethis->UpdateAllViews(NULL);}
2、由于调用了updateallviews函数,所以需要在视图类窗口重写该函数
声明函数
virtualvoidOnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);实现函数void CMyView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) { CMyDoc* pDoc =(CMyDoc*) this->m_pDocument;//效果一样//CMyDoc* pDoc =(CMyDoc*) this->GetDocument();this->SetWindowText(pDoc->str);}
3、点击新建,运行结果
对象关系图
theApp
|->m_pMainWnd ( pFrame )
|->m_pViewActive ( pView )
|->m_pDocument ( 文档类对象地址 )
|->m_viewList
切割视图窗口
1、创建一个对象CSplitterWnd
CSplitterWnd split;
2、在框架窗口声明OnCreateClient函数
virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
3、重写该函数
BOOLCMyFrameWnd::OnCreateClient(LPCREATESTRUCT lpcs,CCreateContext* pContext){ split.CreateStatic(this, 2, 1); split.CreateView(0,0,RUNTIME_CLASS(CMyView),CSize(100,100),pContext); split.CreateView(1, 0, RUNTIME_CLASS(CMyView), CSize(100, 100), pContext);returnTRUE;}
4、运行效果
只刷新一个窗口
1、获取相应视图的对象
void CMyDoc::xinjian() {//模拟接收数据this->str = "hello word";//获取链表迭代器m_viewList POSITION pos = GetFirstViewPosition();//获取第一个视图窗口的对象 CView* pView = GetNextView(pos);//再掉一次获取第二个视图的对象 pView = GetNextView(pos);//填写那个对象不刷新那个对象this->UpdateAllViews(pView);//调用视图类onupdate,全部刷新//this->UpdateAllViews(NULL);}
2、运行结果
欢迎关注公众号:顺便编点程
网友评论