⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 20010720001.htm

📁 C++Builder教学大全
💻 HTM
📖 第 1 页 / 共 2 页
字号:
 

<HTML>

 

<HEAD>

 

<TITLE>Borland C++ Builder中MDI应用程序的设计</TITLE>



<META content="Microsoft FrontPage 4.0" name=GENERATOR>

</HEAD>

<BODY aLink=#FF0000 bgColor=#ffffff leftMargin=0 link=#187800 topMargin=0 

vLink=#990099>



<div align="center">

  <table width="744" border="0" cellspacing="0" cellpadding="0" height="76">

    <tr> 

      <td> 

        <p align="center"><em><font size="3"><b><br>

          <br>

          Borland C++ Builder中MDI应用程序的设计<br> 

          <br> 

          <font size="2">李明柱</font></b></font></em></p> 

        <p><br> 

          MDI(多文档界面)应用程序是指用户可以同时打开多个文档,每一个文档显示在应用程序主窗口客户区的独立窗口中。如字处理程序Word就是一个典型的MDI应用程序,你可以在Word中同时打开和使用多个文档,PowerPoint中你也可以同时创建和打开多个幻灯片应用程序,电子表格中也允许用户同时对多个图表进行编辑。MDI应用程序一般包括三类窗口:<br> 

          * 框架窗口:框架窗口与应用程序的主窗口类似,有可改变大小的边框、标题栏、系统菜单等。应用程序必须为框架窗口注册一个窗口类。一个MDI应用程序一般只有一个框架窗口,框架窗口控制着其它各类窗口。  

        </p> 

        <p><img alt="tu1.jpg (15448 bytes)" height=168  

      src="images/tu1.jpg" tppabs="http://www.info365.com.cn/develop/bcb/img/tu1.jpg" width=310><br> 

          * 客户窗口:客户窗口提供对下属MDI子窗口的管理,每一个MDI应用程序有一个客户窗口。<br> 

          <img  

      alt="tu2.jpg (24171 bytes)" height=289  

      src="images/tu2.jpg" tppabs="http://www.info365.com.cn/develop/bcb/img/tu2.jpg" width=402><br> 

          * 子窗口:当用户打开或创建一个文档时,客户窗口便为该文档创建一个子窗口。每个子窗口都有可以改变大小的边框、标题栏、系统菜单、最小最大化按钮等。任何时刻只有一个子窗口是活动的。子窗口不能超出客户窗口的范围。<br> 

          <img  

      alt="tu3.jpg (34089 bytes)" height=219  

      src="images/tu3.jpg" tppabs="http://www.info365.com.cn/develop/bcb/img/tu3.jpg"  

      width=409><br> 

          用一般的开发工具开发MDI应用程序相当麻烦:你必须注册框架窗口和子窗口类、创建框架窗口和客户窗口、写消息循环和回调函数、创建子窗口等等,其中的每一步都不是什么轻而易举之事。但是在Borland  

          C++ Builder(以下简称CB)中实现MDI应用程序却相对简单,你只需设置一下窗体的属性FormStyle即可:把框架窗口的FormStyle设为fsMDIForm,子窗口的FormStyle设为fsMDIChild。另外CB本身也提供了MDI程序模板,选择File|New|Projects|MDI  

          Application,如下图所示:<br> 

          CB就会产生一个MDI应用程序框架。直接编译运行该程序,就可以看到该程序已经具有一个MDI程序的基本特征了。如下图:<br> 

          <img  

      alt="tu4.jpg (11658 bytes)" height=202  

      src="images/tu4.jpg" tppabs="http://www.info365.com.cn/develop/bcb/img/tu4.jpg"  

      width=354><br> 

          我们利用这个模板设计一个MDI应用程序。该程序是一个支持多文本格式和普通文本格式的多文档编辑器,且同时支持工具栏快捷按钮和打印输出。下面我们就来谈一谈其具体开发过程:<br> 

          (1) 选择File|New|Projects|MDI Application,产生MDI程序框架。<br> 

          (2) 把主框架窗口另存为MDIMain.cpp,子窗口另存为MDIChild.cpp,工程名另存为MDI。<br> 

          (3) 转到主框架窗口FrameForm,设置其Caption为“ MDI演示程序---可打开多文件的文本编辑器”,在Object Inspector中观察FrameForm的属性,可看到其FormStyle为fsMDIForm。改变主框架窗口FrameForm上的控件(Component)如下图所示:<br> 

          <br> 

          (4)点击菜单控件,改变菜单项和菜单项的OnClick事件如下,使之适合自己的要求:<br> 

          菜单项 菜单项的OnClick事件<br> 

          文件:新建 New1Click<br> 

          打开 Open1Click<br> 

          退出 Exit1Click <br> 

          窗口:层叠 Tile1Click<br> 

          平铺 Cascade1Click<br> 

          排列图标 Arrangeicons1Click<br> 

          (5) 改变SpeedPanel上的TSpeedButton控件和事件响应,并在其属性Glyph中装入相应的位图图像:<br> 

          快捷按钮名称 事件响应<br> 

          SpeedButton1 New1Click<br> 

          SpeedButton2 Open1Click<br> 

          SpeedButton3 Exit1Click<br> 

          (6)修改原有的OpenDialog文件打开对话框控件的属性:<br> 

          单击Filter属性,弹出Filter Editor对话框,输入:<br> 

          Rich Text Format(*.rtf) *.rtf<br> 

          Text Files(*.txt) *.txt<br> 

          All Files(*.*) *.*<br> 

          (7) 选择View|Project Manager,在Project Manager中单击MDIChild一栏的ChildForm,就可以查看该子窗体的FormStyle属性为fsMDIChild。设置窗体的事件响应:<br> 

          OnClick FormClick<br> 

          OnClose FormClose<br> 

          OnCloseQuery FormCloseQuery<br> 

          OnCreate FormCreate<br> 

          拖动控件到ChildForm之上,设置好如下图所示界面:<br> 

          <img  

      alt="tu5.jpg (31931 bytes)" height=323  

      src="images/tu5.jpg" tppabs="http://www.info365.com.cn/develop/bcb/img/tu5.jpg" width=461><br> 

          <br> 

          (8) 设置ChildForm上菜单控件的菜单项名称和菜单项的OnClick事件:<br> 

          <br> 

          菜单项 菜单项的OnClick事件<br> 

          文件:新建 New1Click<br> 

          打开 Open1Click<br> 

          关闭 Close1Click<br> 

          保存 Save1Click<br> 

          另存为 Saveas1Click<br> 

          打印 Print1Click <br> 

          打印设置 Printersetup1Click<br> 

          退出 Exit1Click<br> 

          编辑:剪切 Cut1Click<br> 

          复制 Copy1Click<br> 

          粘贴 Paste1Click<br> 

          删除 Delete1Click <br> 

          全选 Selectall1Click<br> 

          其他:靠左 Left1Click<br> 

          靠右 Left1Click<br> 

          居中 Left1Click<br> 

          自动换行 Wordwrap1Click<br> 

          字体 Font1Click<br> 

          (9) 从Dialogs控件板选取对话框控件到ChildForm上,并设置其属性:<br> 

          * SaveDialog<br> 

          Name SaveFileDialog<br> 

          单击Filter属性,弹出Filter Editor对话框,输入:<br> 

          Rich Text Format(*.rtf) *.rtf<br> 

          Text Files(*.txt) *.txt<br> 

          All Files(*.*) *.*<br> 

          * PrintDialog<br> 

          Name PrintDialog1<br> 

          * PrinterSetupDialog<br> 

          Name PrinterSetupDialog1<br> 

          * FontDialog<br> 

          Name FontDialog1<br> 

          (10) 然后从Win32控件板中选择RichEdit控件,放在ChildForm上,设置其属性:<br> 

          Align alClient<br> 

          Name doc<br> 

          点击Lines属性,弹出String list editor,清空里面的内容。<br> 

          <br> 

          (11) 最后,在程序中加入程序源代码。运行该程序,然后打开两个文档,如下图所示(该程序在C++ Builder 3.0和Windows  

          95下调试通过):<br> 

          附源程序清单:<br> 

          (这儿略去大部分系统自己加进去的程序代码部分):<br> 

          //-------- MDIMain.cpp--------<br> 

          #include "MDIMain.h"<br> 

          #include "MDIChild.h"<br> 

          __fastcall TFrameForm::TFrameForm(TComponent* Owner)<br> 

          : TForm(Owner)<br> 

          { }<br> 

          void __fastcall TFrameForm::Exit1Click(TObject *Sender)<br> 

          {Close();//应用程序退出}<br> 

          void __fastcall TFrameForm::Tile1Click(TObject *Sender)<br> 

          {Tile();//窗口层叠}<br> 

          void __fastcall TFrameForm::Cascade1Click(TObject *Sender)<br> 

          {Cascade();//窗口平铺}<br> 

          void __fastcall TFrameForm::Arrangeicons1Click(TObject *Sender)<br> 

          { ArrangeIcons();//排列图标}<br> 

          //新建文档<br> 

          void __fastcall TFrameForm::New1Click(TObject *Sender)<br> 

          { ChildForm = new TChildForm(this); }<br> 

          //打开文件<br> 

          void __fastcall TFrameForm::Open1Click(TObject *Sender)<br> 

          {<br> 

          if(OpenFileDialog-&gt;Execute()){<br> 

          ChildForm=new TChildForm(this);<br> 

          ChildForm-&gt;Open(OpenFileDialog-&gt;FileName);<br> 

          }<br> 

          }<br> 

          //----------MDIChild.cpp-------------<br> 

          #include "MDIChild.h"<br> 

          #include "MDIFrame.h"<br> 

          TChildForm *ChildForm;<br> 

          //定义缺省文件名为Untitled<br> 

          const AnsiString DefaultFileName = AnsiString("Untitled");<br> 

          __fastcall TChildForm::TChildForm(TComponent* Owner)<br> 

          : TForm(Owner)<br> 

          { }<br> 

          //文件打开函数<br> 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -