Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19269089
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: C/C++

2008-05-31 13:53:16

第4章 开发应用程序用户界面
    使用C++Builder,可以通过将组件面板上的组件拖放到窗体中来建立用户界面(UI)。

4.1 理解TApplication、TScreen和TForm
    TApplication、TScreen和TForm这几个VCL类通过对工程的控制而成为所有C++Builder应用程序的主干。TApplication通过提供属性和方法来封装标准的应用,并由此形成应用程序的基础。
    TScreen通常用于在运行时记录已装入的窗体和数据模块,以及一些特定的系统信息。例如屏幕显示效果,可显示的字体等。TForm的实例用于创建应用程序的用户界面,此外,应用程序中的窗口对话框也基于TForm。

4.1.1 使用主窗体
    TForm是创建WindowsGUI应用程序的关键类。缺省时,在工程中创建并保存的第一个窗体会成为工程的主窗体,也即运行时第一个生成的窗体。当在工程中加入窗体后,可能会决定指定另外的窗体作为应用程序主窗体。指定一个窗体为主窗体可在运行时很容易地测试出来,因为除非改变窗体的生成顺序,否则,主窗体总是运行程序时第一个显示的窗体。

若要改变工程的主窗体:
1) 选择Project│Options菜单项。然后选中Forms页。
2) 在MainForm组合框中选择欲作为工程主窗体的窗体名,并选择OK运行应用程序。如果此时运行程序,新选择的主窗体被首先显示。

4.1.2 加入其他窗体
    选择File│NewForm菜单项,可以在工程中加入新的窗体。选择View│ProjectManager菜单项。可在工程管理器中查工程中包含的所有窗体及其单元文件的列表。

    链接窗体
    在工程中加入窗体的同时会将窗体引用加入工程文件,但不会加入其他单元文件。在编写引用新窗体的代码之前,应在引用该窗体的单元文件中加入对该窗体的引用。这个过程称之为链接窗体。
    通常,链接窗体的原因通常是因为要提供访问该窗体中包含的组件。例如在一个包含数据访问组件的数据模块及一个包含数据感知组件的窗体之间,就经常要使用窗体链接。要将一个窗体链接到另一个窗体:

1) 选取需引用另一个窗体的窗体。
2) 选择File│IncludeUnitHdr菜单项。
3) 选择被引用窗体的单元文件名。
4) 选择OK。

    将一个窗体链接到另一个只不过是在一个窗体的单元文件中加入另一个窗体单元的头文件。这表示被链接的窗体及其组件当前包括在链接窗体的范围内。

4.1.3 隐藏主窗体
    在应用程序启动时可以不显示主窗体。为此,需用到全局变量Application(在下节介绍)要在启动时隐藏主窗体:

1) 选择Project│ViewSource菜单显示工程主文件
2) 在Application→CreateForm()调用之后及Application→Run()调用之前添加下列语句:

 Application→Showmainform = false;
 Form1→Visible = false; // the name of your main form differ

  注意 隐藏窗体更好的方式是在设计时使用对象观察器将窗体Visible的属性设为false,而不是用上述方法在运行时设置。
4.1.4 工作在应用程序层
    在所有基于VCL的Windows应用程序中都有TApplication类的全局变量Application。Application与应用程序封装在一起,并提供了许多工作于后台的功能函数。例如Application会处理如何利用菜单调用帮助文件。对于开发独立的应用程序与编写组件而言,理解TApplication如何工作对后者更加重要,不过,即使是开发独立的应用程序,在创建工程时,也应在Project│options菜单项的Application页面中设置Application处理的各个选项。
    另外,Application还会接收许多作用于整个应用程序的事件。例如OnActivate可使你在应用程序启动时完成一些操作。OnIdle事件在应用程序空闲时处理后台操作,OnMessage事件可接收Windows消息等等。尽管不能在IDE中直接检查全局变量Application的属性和事件,但可使用另一组件TApplicationEvents来接收事件,并用IDE来提供事件处理程序。

4.1.5 处理屏幕
    在创建工程时还会创建一个类型为TScrecn的全局变量Screen。Screen封装了应用程序运行时所在的屏幕的状态。Screen实现的常见任务包括确定光标外观。应用程序运行时的窗口大小。屏幕设备的可用字体列表以及多屏幕方式等。若应用程序运行于多个监视器上。Screen会维护一个监视器列表及它们的尺寸,以便有效的管理用户界面的布局。

4.1.6 管理布局
    简单地说,管理用户界面的布局就是控制将控件放入窗体的方式,所选择的放置方式会反映在控件的Top、Left、Width和Height等属性中,在运行时,也可以通过改变这些属性值来改变控件的大小及在窗体中的位置。
    控件还有很多其他的属性可用于根据其内容或容器进行自动的调整。这使得窗体的布局可被设置为各部分集成的一个整体。
有两个属性会影响控件相对于父代的大小及位置。
    Align属性强制控件沿着父代的某特定边缘放置,或是在其他控件放置结束后填满剩下的整个客户区。
    当父代改变大小时,控件也会自动地改变大小。同时保持沿着父代特定边缘或填满客户区的剩余部分。
    如果需要控件沿父代特定边缘放置,但不希望它随父代而改变大小或总是紧贴整个边缘。可使用Anchors属性。
    如果要确保控件不会变得太大或太小,可用Constraints属性。Constraints可确定控件高度最大值与最小值,宽度最大值与最小值,通过这些设置可以像素为单位限制控件的高度与宽度。例如,通过一容器控件的MinHeight及MinWidth。可以确保容器控件中的子控件始终可见。Constraints的值通过父代/子代的层次传递。因此,包含具有大小限制的子控件的对象可被限制大小。Constraints也可在控件的ChangeScale方法被调用时,防止它只在某一个方向上改变大小。

    TControl引入了一个类型如TConstrainedResizeEvent的保护事件OnConstrainedResize:

    这个事件允许在改变控件大小时重载大小限制。大小限制被作为参数传入。并可在事件处理程序中改变。OnConstrainedResize发布于容器对象(TForm、TScrollBox、TControlBar和TPanel)。另外,编写组件时可在TControl类的派生类中使用或发布此事件。
    带有可变尺寸大小内容的控件有一个AutoSize属性,这使得控件可调整其字体或所包含对象的大小。

    4.2 处理消息
    消息是由Windows发给应用程序的通告,用于告知某些事件的发生。消息本身是Windows发送给控件的记录。例如,当用户在一个对话框中点击鼠标时,Windows发送一个消息给当前活跃的控件。包含这个控件的应用程序会对消息做出反应。如果用户点击的是一个按钮,在收到消息时就会触发OnClick事件,如果点击在窗体中,应用程序就可能会忽略此消息。
    Windows发送给应用程序的记录类型为TMsg。Windows为每个消息预定义了一个常数,这些数值存放在TMsg的消息字段中,每个常数都以字母wm开头。
    除非你重载消息处理系统并生成自己的消息处理程序,否则VCL会自动处理消息。

阅读(357) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~