VC++60 第十五章 多文档界面的程序

第十五章 多文档界面的程序

 

上一章我们介绍了单文档的程序,它只能打开一个文档进行编辑,要编辑或查看另一文档,当前文档就被关闭了。多文档的应用程序象WORD,VC++本身等,都可以同时打开多个文档进行操作。本章介绍创建多文档程序的基本方法。

本章要点

1 创建一个多文档的应用程序
2 字符串表和修改文件对话框的过滤
3 创建和修改工具条

 

15.1 MCircle程序的界面和功能

 

我们先来建立一个多文档应用程序MCircle,它的功能和上一章的Circle程序一样,按一下鼠标就画一个圆。只是它可以打开多个文档,也可以把同一个文档打开多次。

创建工程
打开应用程序向导,在d:\myVC\CH15创建应用程序MCircle。选择“多文档”,注意选择“工具条和状态栏支持”,最后一步视图基类选择CView。程序运行时的界面如图chap15-01所示。

VC++60 <wbr> <wbr>第十五章 <wbr>多文档界面的程序
图chap15-01

图中打开了两个文档,MCircle2 是当前文档,所以在主窗口的标题这形式了“ MCircle --MCircle2”。每个子窗口的大小都可以改变,菜单条中有一个“窗口”菜单,可以对多个窗口进行排列和选择。文件菜单中有打印功能,那是在创建工程时用户自己选的。还可以保存4-10个“最近打开的”文档,这也是在在创建工程时由用户自己选定。当鼠标停留在菜单项或工具图标上时,右下角的状态栏会显示它们的功能说明。在打开文件时,对话框中的文件类型会显示(*.Cir),这是我们要设置的。

 

15.2 编写代码

 

为了画圆,需要在文档和视图类中引进表示圆心和半径的变量 m_PosX、m_PosY和m_Reduse,在他们的构造函数中定义,在OnInitialUpdate()中初始化。在OnDraw()函数中画圆,添加鼠标点击消息并加入画圆的代码。各代码清单如下:

1)在MCircleView.h文件的构造函数中
// Implementation
public:
    int m_PosX;
    int m_PosY;
    int m_Reduse;

    virtual ~CMCircleView();

2)
void CMCircleView::OnInitialUpdate()
{
    CView::OnInitialUpdate();
    // TODO: Add your specialized code here and/or call the base class
    CMCircleDoc *pDoc = GetDocument();
    m_PosX = pDoc->m_PosX;
    m_PosY = pDoc->m_PosY;
    m_Reduse = pDoc->m_Reduse;
}

3)
void CMCircleView::OnDraw(CDC* pDC)
{
    CMCircleDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here

    RECT rect;
    rect.left = m_PosX - m_Reduse ;
    rect.top = m_PosY - m_Reduse ;
    rect.right = m_PosX + m_Reduse ;
    rect.bottom= m_PosY + m_Reduse ;
    pDC->Ellipse(&rect);
}

4)
void CMCircleView::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    m_PosX = point.x;
    m_PosY = point.y;
    Invalidate();

    CMCircleDoc *pDoc = GetDocument();
    pDoc->m_PosX = m_PosX;
    pDoc->m_PosY = m_PosY;
    pDoc->m_Reduse = m_Reduse ;
    pDoc->SetModifiedFlag(TRUE);
    // my code END
    CView::OnLButtonDown(nFlags, point);
}

保存、编译和运行,就可以看到如图01所示的程序了。

 

15.3 字符串表的修改

 

打开工作区的resource页的String Table,就可以看到字符串表String Table,双击它打开一个字符串表如下图chap15-02所示:

VC++60 <wbr> <wbr>第十五章 <wbr>多文档界面的程序
图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文件。

VC++60 <wbr> <wbr>第十五章 <wbr>多文档界面的程序
图chap15-03

 

15.4 工具条的修改编辑

 

图01中工具条是向导自己创建的标准工具条,打开工作区的资源页,展开ToolBar,就可以看到ID为IDR_MAINFRAMED的工具条。双击它,就会打开一个图标编辑器,可以让用户编辑和修改工具条。如图chap10-04所示

VC++60 <wbr> <wbr>第十五章 <wbr>多文档界面的程序
图chap10-04

如图形工具和颜色工具窗口没有打开,可以用右键点用户区的底部,选择你所需要的窗口打开它。现在我们来增加一个颜色工具,设计为如下的3×3正方形。
VC++60 <wbr> <wbr>第十五章 <wbr>多文档界面的程序 
保存后我们还需要条加一个“颜色”菜单,其中添加一个菜单项“选择"颜色,它将打开一个颜色对话框用来设置画圆颜色。菜单和工具的ID必须是相同的,这才能保证它们都用同一个事件响应函数。双击工具条中某一个的图标,就可以打开改根据的属性对话框,修改ID,并设置它的提示字符串。这些工作,留给读者作
为练习。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值