初识MFC文档视图程序中多视图间的数据交互

初识MFC文档视图程序中多视图间的数据交互

最近又在MFC下折腾了,折腾了一天做了个分隔窗口的单文档视图程序,分隔出了2个窗口,每个窗口都放了一个CFormView视图。接着就需要考虑这两个CFormView视图之间的数据交互了。


举个简单的例子(在单文档视图程序中),比如我在View1中点击一个按钮,设置View2中CEdit的值。


要实现这个功能,有一个简便的方法,就是直接在View1中先获取文档指针,接着用文档指针遍历查找出View2的视图指针,然后修改CEdit的值。


不过MFC的文档视图程序应该不是这么玩的,应该考虑把程序中的数据都放在文档中,比如我们说到的这个例子,可以在文档中创建一个变量m_szText来存放CEdit的值。


当在View1中需要修改View2中Cedit的值时,首先在View1中获取文档指针,接着修改文档中m_szText的值,然后用UpdateAllView函数通知View2视图更新。


当使用文档类的UpdateAllView函数后,需要更新的视图会响应OnUpdate消息。


此时我们就可以在View2视图的OnUpdate中更新CEdit的值了。


下面来看看实例代码:


1. 在View1中的按钮点击消息
void CView1::OnBtnTestClick()
{
    //获取文档指针
    CMainDoc *pDoc = GetDocument();

    //修改文档中保存CEdit控件值的变量
    pDoc->m_szText = L"测试123";
    //这里的this指针不是告诉文档要更新哪个视图
    //而是告诉文档在哪个视图中更改了文档数据
    pDoc->UpdateAllViews( this );
}


2. 在View2的OnUpdate重载函数中更改CEdit的值
void CView2::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
    CMainDoc *pDoc = ( CMainDoc * ) GetDocument();
    //m_szEdtText是与CEdit关联的变量
    m_szEdtText = pDoc->m_szText;

    //拷贝控件关联变量中的值到控件,并显示
    UpdateData( FALSE );
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值