C Builder中MDI应用程式的设计

2008-02-23 05:25:22来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

MDI(多文档界面)应用程式是指用户能够同时打开多个文档,每一个文档显示在应用程式主窗口客户区的单独窗口中。如字处理程式Word就是个典型的MDI应用程式,您能够在Word中同时打开和使用多个文档,PowerPoint中您也能够同时创建和打开多个幻灯片应用程式,电子表格中也允许用户同时对多个图表进行编辑。MDI应用程式一般包括三类窗口:
* 框架窗口:框架窗口和应用程式的主窗口类似,有可改变大小的边框、标题栏、系统菜单等。应用程式必须为框架窗口注册一个窗口类。一个MDI应用程式一般只有一个框架窗口,框架窗口控制着其他各类窗口。


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

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

用一般的研发工具研发MDI应用程式相当麻烦:您必须注册框架窗口和子窗口类、创建框架窗口和客户窗口、写消息循环和回调函数、创建子窗口等等,其中的每一步都不是什么轻而易举之事。但是在Borland C Builder(以下简称CB)中实现MDI应用程式却相对简单,您只需配置一下窗体的属性FormStyle即可:把框架窗口的FormStyle设为fsMDIForm,子窗口的FormStyle设为fsMDIChild。另外CB本身也提供了MDI程式模板,选择File|New|Projects|MDI Application,如下图所示:
CB就会产生一个MDI应用程式框架。直接编译运行该程式,就能够看到该程式已具备一个MDI程式的基本特征了。

我们利用这个模板设计一个MDI应用程式。该程式是个支持多文本格式和普通文本格式的多文档编辑器,且同时支持工具栏快捷按钮和打印输出。下面我们就来谈一谈其具体研发过程:
(1) 选择File|New|Projects|MDI Application,产生MDI程式框架。
(2) 把主框架窗口另存为MDIMain.cpp,子窗口另存为MDIChild.cpp,工程名另存为MDI。
(3) 转到主框架窗口FrameForm,配置其Caption为“ MDI演示程式---可打开多文档的文本编辑器”,在Object Inspector中观察FrameForm的属性,可看到其FormStyle为fsMDIForm。改变主框架窗口FrameForm上的控件(Component).

(4)点击菜单控件,改变菜单项和菜单项的OnClick事件如下,使之适合自己的需要:
菜单项 菜单项的OnClick事件
文档:新建 New1Click
打开 Open1Click
退出 Exit1Click
窗口:层叠 Tile1Click
平铺 Cascade1Click
排列图标 Arrangeicons1Click
(5) 改变SpeedPanel上的TSpeedButton控件和事件响应,并在其属性Glyph中装入相应的位图图像:
快捷按钮名称 事件响应
SpeedButton1 New1Click
SpeedButton2 Open1Click
SpeedButton3 Exit1Click
(6)修改原有的OpenDialog文档打开对话框控件的属性:
单击Filter属性,弹出Filter Editor对话框,输入:
Rich Text Format(*.rtf) *.rtf
Text Files(*.txt) *.txt
All Files(*.*) *.*
(7) 选择View|Project Manager,在Project Manager中单击MDIChild一栏的ChildForm,就能够查看该子窗体的FormStyle属性为fsMDIChild。配置窗体的事件响应:
OnClick FormClick
OnClose FormClose
OnCloseQuery FormCloseQuery
OnCreate FormCreate
拖动控件到ChildForm之上。


(8) 配置ChildForm上菜单控件的菜单项名称和菜单项的OnClick事件:

菜单项 菜单项的OnClick事件
文档:新建 New1Click
打开 Open1Click
关闭 Close1Click
保存 Save1Click
另存为 Saveas1Click
打印 Print1Click
打印配置 Printersetup1Click
退出 Exit1Click
编辑:剪切 Cut1Click
复制 Copy1Click
粘贴 Paste1Click
删除 Delete1Click
全选 Selectall1Click
其他:靠左 Left1Click
靠右 Left1Click
居中 Left1Click
自动换行 Wordwrap1Click
字体 Font1Click
(9) 从Dialogs控件板选取对话框控件到ChildForm上,并配置其属性:
* SaveDialog
Name SaveFileDialog
单击Filter属性,弹出Filter Editor对话框,输入:
Rich Text Format(*.rtf) *.rtf
Text Files(*.txt) *.txt
All Files(*.*) *.*
* PrintDialog
Name PrintDialog1
* PrinterSetupDialog
Name PrinterSetupDialog1
* FontDialog
Name FontDialog1
(10) 然后从Win32控件板中选择RichEdit控件,放在ChildForm上,配置其属性:
Align alClient
Name doc
点击Lines属性,弹出String list editor,清空里面的内容。

(11) 最后,在程式中加入程式源代码。运行该程式,然后打开两个文档(该程式在C Builder 3.0和Windows 95下调试通过):
附源程式清单:
(这儿略去大部分系统自己加进去的程式代码部分):
//-------- MDIMain.cpp--------
#include "MDIMain.h"
#include "MDIChild.h"
__fastcall TFrameForm::TFrameForm(TComponent* Owner)
: TForm(Owner)
{ }
void __fastcall TFrameForm::Exit1Click(TObject *Sender)
{Close();//应用程式退出}
void __fastcall TFrameForm::Tile1Click(TObject *Sender)
{Tile();//窗口层叠}
void __fastcall TFrameForm::Cascade1Click(TObject *Sender)
{Cascade();//窗口平铺}
void __fastcall TFrameForm::Arrangeicons1Click(TObject *Sender)
{ ArrangeIcons();//排列图标}
//新建文档
void __fastcall TFrameForm::New1Click(TObject *Sender)
{ ChildForm = new TChildForm(this); }
//打开文档
void __fastcall TFrameForm::Open1Click(TObject *Sender)
{
if(OpenFileDialog->Execute()){
ChildForm=new TChildForm(this);
ChildForm->Open(OpenFileDialog->FileName);
}
}
//----------MDIChild.cpp-------------
#include "MDIChild.h"
#include "MDIFrame.h"
TChildForm *ChildForm;
//定义缺省文档名为Untitled
const AnsiString DefaultFileName = AnsiString("Untitled");
__fastcall TChildForm::TChildForm(TComponent* Owner)

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 浅析c/c 中的指针

下一篇: C BUILDER 动态建立菜单及菜单事件