拆分窗口的同步更新

来源:互联网 发布:java finally 编辑:程序博客网 时间:2024/05/22 09:02

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

    实验的步骤是

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()函数。。。具体代码如下:

     

 

原创粉丝点击