AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > C++

理解TApplication、TScreen和TForm

51自学网 http://www.51zixue.net

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会自动处理消息。

 
 

上一篇:C++ Builder 控制窗体何时驻留内存  下一篇:在C++Builder中创建DLL