MFC文档类视图接收字符串

他在二楼,你在一楼,如果他没有看你的话,那为什么你们会对视呢?

----  网易云热评

一、文档类处理数据

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、运行结果

欢迎关注公众号:顺便编点程

你可能感兴趣的:(MFC文档类视图接收字符串)