第十五章 多文档界面的程序
上一章我们介绍了单文档的程序,它只能打开一个文档进行编辑,要编辑或查看另一文档,当前文档就被关闭了。多文档的应用程序象WORD,VC++本身等,都可以同时打开多个文档进行操作。本章介绍创建多文档程序的基本方法。
本章要点
1 创建一个多文档的应用程序
2 字符串表和修改文件对话框的过滤
3 创建和修改工具条
15.1 MCircle程序的界面和功能
我们先来建立一个多文档应用程序MCircle,它的功能和上一章的Circle程序一样,按一下鼠标就画一个圆。只是它可以打开多个文档,也可以把同一个文档打开多次。
创建工程
打开应用程序向导,在d:\myVC\CH15创建应用程序MCircle。选择“多文档”,注意选择“工具条和状态栏支持”,最后一步视图基类选择CView。程序运行时的界面如图chap15-01所示。
图中打开了两个文档,MCircle2 是当前文档,所以在主窗口的标题这形式了“ MCircle --MCircle2”。每个子窗口的大小都可以改变,菜单条中有一个“窗口”菜单,可以对多个窗口进行排列和选择。文件菜单中有打印功能,那是在创建工程时用户自己选的。还可以保存4-10个“最近打开的”文档,这也是在在创建工程时由用户自己选定。当鼠标停留在菜单项或工具图标上时,右下角的状态栏会显示它们的功能说明。在打开文件时,对话框中的文件类型会显示(*.Cir),这是我们要设置的。
15.2 编写代码
为了画圆,需要在文档和视图类中引进表示圆心和半径的变量 m_PosX、m_PosY和m_Reduse,在他们的构造函数中定义,在OnInitialUpdate()中初始化。在OnDraw()函数中画圆,添加鼠标点击消息并加入画圆的代码。各代码清单如下:
1)在MCircleView.h文件的构造函数中
// Implementation
public:
2)
void CMCircleView::OnInitialUpdate()
{
}
3)
void CMCircleView::OnDraw(CDC* pDC)
{
}
4)
void CMCircleView::OnLButtonDown(UINT nFlags, CPoint point)
{
}
保存、编译和运行,就可以看到如图01所示的程序了。
15.3 字符串表的修改
打开工作区的resource页的String Table,就可以看到字符串表String Table,双击它打开一个字符串表如下图chap15-02所示:
其中储存着程序程序中使用到的字符串。例如图中高亮显示的行是“文件/打开”菜单的ID,字符串的值为“打开一个现有文件\n打开”,前一半是当鼠标停留在“文件/打开”菜单项或对应的工具图标上时在状态栏中显示的提示信息,后一半是在鼠标箭头下的弹初出信息,中间用"\n"分隔。
第二行是IDR_MCIRCLTYPE,其值为129,字符串=“MCircle 程序\nMCircle\nMCircle\nCIR Files{*.Cir)\n.cir\nMCircle.Document\nMCircle Document”,它包括应用程序窗口显示的标题,打开文件对话框时的缺省扩展名等7个子字符串。
1)MCircle 程序
2)\nMCircle
3)\nMCircle
4)\nCIR Files{*.Cir)
5)\n.cir
6)\nMCircle.Document
7)\nMCircle Document
按上面的内容修改后编译和运行,再创建新文件看看。在保存文件和打开文件时,就会过滤掉其他文件,只显示*.Cir文件。
15.4 工具条的修改编辑
图01中工具条是向导自己创建的标准工具条,打开工作区的资源页,展开ToolBar,就可以看到ID为IDR_MAINFRAMED的工具条。双击它,就会打开一个图标编辑器,可以让用户编辑和修改工具条。如图chap10-04所示
如图形工具和颜色工具窗口没有打开,可以用右键点用户区的底部,选择你所需要的窗口打开它。现在我们来增加一个颜色工具,设计为如下的3×3正方形。
保存后我们还需要条加一个“颜色”菜单,其中添加一个菜单项“选择"颜色,它将打开一个颜色对话框用来设置画圆颜色。菜单和工具的ID必须是相同的,这才能保证它们都用同一个事件响应函数。双击工具条中某一个的图标,就可以打开改根据的属性对话框,修改ID,并设置它的提示字符串。这些工作,留给读者作为练习。