运行现在的程序。打开两个子窗口MultiD1和MultiD2,在其中一个窗口中MultiD1中键入“this is a test.”。然后将焦点移至另一个子窗口MultiD2,并使它遮住MultiD1的一部分。再将焦点移回MultiD1。这时窗口的显示是不正确的,如图7-9所示。
我们必须在OnDraw函数中加入一些代码,使它能对当前的文档进行正确地显示。修改OnDraw函数如下:
程序清单7-27 OnDraw函数
void CMultiDoc1View::OnDraw(CDC* pDC)
{
CMultiDoc1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
TEXTMETRIC tm1;
CClientDC dc(this);
dc.GetTextMetrics(&tm1);
for(int p=0;p<=pDoc->m_LineCount;p++)
dc.TextOut(0,p*tm1.tmHeight,pDoc->m_TextString[p]);
}
现在再做前面的实验,我们发现,窗口的显示已经正常了。
至此,我们的多文档功能已经被加入到程序中了。在下一节,我们将继续修改这个项目,在其中加入对多窗口的支持。
在前面的程序MultiDoc1中,我们生成了一个支持多文档的编辑器。在这一节中,我们要介绍如何使用多视图窗。使用多视图窗有两种办法:
n 当用户选择Window 菜单下的New Window菜单,打开一个新的视图窗,并在其中显示出当前文档。
n 利用切分窗口,让用户在同一窗口中处理同一文档的多个视图窗。
n 我们将在下面利用第一种方法程序MultiDoc1加以改进,加入对多视图窗功能的支持。
现在我们首先运行目前的程序MultiDoc1。在视图窗中键入“it is a test”,然后选择Window 菜单下的New Window菜单时,系统会弹出一个新的视图窗,其中显示了当前的文档“it is a test”,如图7-10所示。