拆分窗口的同步更新

     今天做了拆分窗口和窗口同步更新,以及视图和文档实现数据沟通的实验,问题多多、、、

    实验的步骤是

1:在主窗口类中声明一个CSplitterWnd类的成员变m_splitterwnd

2:重载主窗口中继承cwnd的成员函数OnCreateClient

3:利用函数CreateStatic来重载OnCreateClient,最后记得因为是静态创建,所以还要调用Create函数来初始化各个窗口对象

 

以下是代码

 

 

 

    先在文档类中定义一个成员变量m_string,在构造函数中初始化为

“shizhan”;

    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs,CCreateContext* pContext )
{
 m_splitterwnd.CreateStatic(this,2,2);
 m_splitterwnd.CreateView(0, 0, RUNTIME_CLASS(CFirstView), CSize(0, 0),
      pContext);
 m_splitterwnd.CreateView(0, 1, RUNTIME_CLASS(CTwoView), CSize(0, 0),
      pContext);
 m_splitterwnd.CreateView(1, 0, RUNTIME_CLASS(CThreeView), CSize(0, 0),
      pContext);
 m_splitterwnd.CreateView(1, 1,RUNTIME_CLASS( CFourView), CSize(0, 0),
      pContext);
 return 1;
}

note:记住上面的RUNTIME_CLASS宏不能少掉,否则编译则无法通过

然后声明四个拆分窗口对象,在四个拆分窗口对象OnDraw初始化图像

 CString b=((CspiltterwndDoc*)(pDoc))->m_string;
 pDC->SetTextColor(RGB(0,46,80));
 pDC->TextOut(20,20,b);

四个类的函数都是一致的。。。。

note:((CspiltterwndDoc*)(pDoc))这个转换当初少写个括号,老是转换不成功,以后要多多注意这种小问题。。

 

在.rc文件中修改菜单项,添加两个菜单子项first和two,用来更改各个拆分窗口的图像。。。

在first和two上添加事件处理程序。。。

代码如下

void CFirstView::Onfirst()
{

 CspiltterwndDoc* pDoc=(CspiltterwndDoc*)GetDocument();
 pDoc->m_string="first";
 pDoc->UpdateAllViews(NULL);


 // TODO: 在此添加命令处理程序代码
}


void CFirstView::Ontwo()
{

 CspiltterwndDoc* pDoc=(CspiltterwndDoc*)GetDocument();
 pDoc->m_string="two";
 pDoc->UpdateAllViews(NULL);


 // TODO: 在此添加命令处理程序代码
}

 

 note:上面的文档和视图的关联是通过pContext参数由系统帮助我们实现的,如果我们想自己手动关联视图和文档,把pContext设置为空,然后重写每个view里面的OnInitalUpDate()函数。。。具体代码如下:

     

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值